封装智能指针 qt实现登录界面

news2024/9/16 16:27:47

1.封装独占智能指针——unique_ptr

#include <iostream>
#include <utility> // For std::move

// 命名空间
namespace custom_memory
{
template <typename T>
class myPtr
{
public:
    // 使用初始化列表进行初始化
    explicit myPtr(T* p = nullptr) noexcept : m_ptr(p) {}

    // 析构函数
    ~myPtr() noexcept {
        delete m_ptr;
    }

    // 重载解引用操作符
    T& operator*() const {
        return *m_ptr;
    }

    // 重载成员访问操作符
    T* operator->() const noexcept {
        return m_ptr;
    }

    // 禁止拷贝构造
    myPtr(const myPtr&) = delete;

    // 禁用拷贝赋值操作
    myPtr& operator=(const myPtr&) = delete;

    // 移动构造函数
    myPtr(myPtr&& other) noexcept : m_ptr(other.m_ptr)
    {
        other.m_ptr = nullptr;
    }

    // 移动赋值操作符
    myPtr& operator=(myPtr&& other) noexcept
    {
        if (this != &other) {
            delete m_ptr;
            m_ptr = other.m_ptr;
            other.m_ptr = nullptr;
        }
        return *this;
    }

private:
    T* m_ptr; // 成员变量命名
};

} // namespace custom_memory

//类命名
class Person {
public:
    std::string name;
    Person() : name("Unknown") { std::cout << name << "  构造函数" << std::endl; }
    explicit Person(std::string n) : name(std::move(n))
    {
        std::cout << name << "  构造函数" << std::endl;
    }
    ~Person() { std::cout << name << "  析构函数" << std::endl; }
};

//*************************主程序****************************
int main()
{
    custom_memory::myPtr<Person> ptr1(new Person("hello"));
    std::cout << "ptr1 name = " << ptr1->name << std::endl;

    Person* rawPtr = new Person("nihao");
    custom_memory::myPtr<Person> ptr2(rawPtr);
    std::cout << "ptr2 name = " << ptr2->name << std::endl;

    ptr2 = std::move(ptr1);
    std::cout << "ptr2 name = " << ptr2->name << std::endl;

    return 0;
}

2.qt实现登录界面(不能推拽)

#include "widget.h"
#include "ui_widget.h"
#include<QIcon>
#include<QLabel>
#include<QLineEdit>   //行编辑器
#include<QPixmap>      //图标类
#include<QMovie>         //动图类
#include<QPushButton>   //按钮
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //1>尺寸设置
    //设置登录页面尺寸
    this->resize(400,300);
    //固定页面尺寸
    this->setFixedSize(500,400);

    //2>组件标识
    //组件名称设置
    this->setWindowTitle("QQ");

    //窗体图标
    this->setWindowIcon(QIcon("C:\\Users\\你好.幸会\\Desktop\\1.png"));

    //*********************** 按钮***************************

    QPushButton *btn1 = new QPushButton;     //调用无参构造,构造一个按钮
      btn1->setParent(this);        //将自定义的界面当作按钮类的父组件
      btn1->setText("安全登录");           //设置按钮文本内容
      btn1->resize(90,40);              //设置按钮大小
      btn1->move(170,270);              //移动按钮位置
      btn1->setStyleSheet("background-color:skyblue;");    //设置样式表

      QPushButton *btn2 = new QPushButton;     //调用无参构造,构造一个按钮
        btn2->setParent(this);        //将自定义的界面当作按钮类的父组件
        btn2->setText("取消登录");           //设置按钮文本内容
        btn2->resize(90,40);              //设置按钮大小
        btn2->move(btn1->x()+110,btn1->y());              //移动按钮位置
        btn2->setStyleSheet("background-color:skyblue;");    //设置样式表


    //****************************行编辑器设置************************
    //设置行编辑器1
    QLineEdit *edit1 = new QLineEdit;
    edit1->setParent(this);          //指定父组件
    edit1->resize(200, 30);          //重新设置大小
    edit1->move(170,200);

    //设置行编辑器2
    QLineEdit *edit2 = new QLineEdit;
    edit2->setParent(this);          //指定父组件
    edit2->resize(200, 30);          //重新设置大小
    edit2->move(edit1->x(),edit1->y()+35);  //设置位置
    edit2->setEchoMode(QLineEdit::Password);   //不显示输入

    //***********************图标编辑器设置*************************
    //设置qq图标
    QLabel *lab1 = new QLabel;
    lab1->setParent(this);      //设置父组件
    lab1->setText("账号:");     //设置文本内容
    lab1->move(110,205);       //设置坐标位置
    //lab1->resize(30,30);
   // lab1->setPixmap(QPixmap("C:\\Users\\你好.幸会\\Desktop\\11.jpg"));
  //  lab1->setScaledContents(true);

    QLabel *lab2 = new QLabel;
    lab2->setParent(this);      //设置父组件
   lab2->setText("密码:");     //设置文本内容
    lab2->move(110,240);       //设置坐标位置
  //  lab2->resize(30,30);
 //   lab2->setPixmap(QPixmap("C:\\Users\\你好.幸会\\Desktop\\2.jpg"));
  //  lab2->setScaledContents(true);

    //调用有有参构造,指定父组件,构造一个lab
    QLabel *lab3 = new QLabel(this);
    lab3->resize(500,180);
    //动图设置
    //创建一个movie对象
    QMovie *movie=new QMovie("C:\\Users\\你好.幸会\\Desktop\\2.gif");
    //将动图对象放入到标签中
    lab3->setMovie(movie);
    //让动图动起来
    movie->start();
    //让标签内容自适应大小
    lab3->setScaledContents(true);

    //账号与密码
    connect(btn1,&QPushButton::clicked,[=](){
        if(edit1->text()==edit2->text())
            qDebug()<<"登录成功!";
        else
            qDebug()<<"账号或密码错误,登录失败!";
    });

    //取消登录btn2
    connect(btn2,&QPushButton::clicked,[=](){
        this->close();
    });

}

Widget::~Widget()
{
    delete ui;
}

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卡西莫多的诗文集2022-2024.9月6-校庆国庆专版定版

通过网盘分享的文件&#xff1a;卡西莫多的诗文集2022-2024.9月6-A5-校庆国庆专版-定版.pdf 链接: https://pan.baidu.com/s/1cpFK5k1baGXbSGxY30GL_A?pwdjgnt 提取码: jgnt 卡西莫多的诗文集2022-2024.9月6-校庆国庆专版&#xff0c;又稍作修改并勘误了一些错字&#xff0c;…

AWQ量化(Activation-aware Weight Quantization)

论文&#xff1a; AWQ: Activation-aware Weight Quantization for On-Device LLM Compression and Acceleration 中文解读&#xff1a; 深入理解AWQ量化技术 - 知乎 (zhihu.com) 动机&#xff1a;端侧设备用LLM&#xff0c;为了减少显存占用量&#xff0c;所以要用INT4量化&am…

【Jupyter Notebook】汉化

1.打开:Anaconda Prompt 2.输入:"activate Zhui01"(注意&#xff1a;Zhui01是刚创建的环境名字) activate Zhui01 3.输入:"pip install jupyterlab-language-pack-zh-CN" pip install jupyterlab-language-pack-zh-CN 4.打开:Jupyter Notebook 5.点击&q…

Mysql高级篇(中)——七种常见的 join 查询图

注意&#xff1a; MySQL是不支持 FULL OUTER JOIN 这种语法的&#xff0c;因此要实现图中 6、7的查询结果&#xff0c;可以使用 UNION 关键字结合 LEFT JOIN、RIGHT JOIN 实现&#xff0c;UNION可以实现去重的效果&#xff1b; 参考如下代码&#xff1a; -- MySQL中 图标6 的实…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

上回我们学到创建一个地形和一个人物&#xff0c;今天我们实现一下人物实现移动和跳起&#xff0c;依次点击&#xff0c;我们准备创建一个C#文件 创建好我们点击进去&#xff0c;就会跳转到我们的Vision Studio&#xff0c;然后输入这些代码 using UnityEngine;public class M…

MarginNote 4 激活码 - 苹果电脑(Mac)全能型的阅读工具

对广大求学者来说&#xff0c;如何科学有效地掌握知识&#xff0c;一定是大家不懈追求的方向。 众多求学者使用的&#xff0c;深度阅读学习工具 MarginNote&#xff0c;终于为 Mac 推出了官网 4.0 版。带来了众多创新的学习辅助工具。 MarginNote 4 功能简介 1、快速理清各版…

大数据新视界--大数据大厂之Java 与大数据携手:打造高效实时日志分析系统的奥秘

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

探索fastFM:Python中的高效推荐系统库

文章目录 &#x1f680; 探索fastFM&#xff1a;Python中的高效推荐系统库背景&#xff1a;为何选择fastFM&#xff1f;快照&#xff1a;fastFM是什么&#xff1f;安装指南&#xff1a;如何将fastFM加入你的项目&#xff1f;快速入门&#xff1a;五个基础函数的使用实战演练&am…

猫眼电影字体破解(图片转码方法)

问题 随便拿一篇电影做样例。我们发现猫眼的页面数据在预览窗口中全是小方框。在当我们拿到源码以后&#xff0c;数据全是加密后的。所以我们需要想办法破解加密&#xff0c;拿到数据。 破解过程 1.源码获取问题与破解 分析 在我们刚刚请求url的时候是可以得到数据的&#xff…

halcon 由离散点云生成3d模型(2步)

一&#xff0c;创建立方体的3d坐标&#xff0c;定义X,Y,Z坐标 dev_open_window (0, 0, 512, 512, black, WindowHandle) x:[0,0,1,1,0,0,1,1] y:[0,1,1,0,0,1,1,0] z:[0,0,0,0,2,2,2,2] 二&#xff0c;由3创建3d模型&#xff08;在这里是将所有的点集合为一体&#xff09; ge…

多路转接之select(fd_set介绍,参数详细介绍),实现非阻塞式网络通信

目录 多路转接之select 引入 介绍 fd_set 函数原型 nfds readfds / writefds / exceptfds readfds 总结 fd_set操作接口 timeout timevalue 结构体 传入值 返回值 代码 注意点 -- 调用函数 select的参数填充 获取新连接 注意点 -- 通信时的调用函数 添…

JavaScript使用高德API显示地图

前言 在JavaScript中&#xff0c;使用Leaflet库显示地图是一种常见的做法。Leaflet是一个开源的JavaScript库&#xff0c;用于在Web应用程序中创建互动地图。它非常轻量级&#xff0c;易于使用&#xff0c;并且提供了多种功能&#xff0c;使开发者能够轻松地将地图集成到他们的…

【Python报错已解决】 SyntaxError: positional argument follows keyword argument

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;调整参数顺序2.2 步骤二…

银行贷款产品

1、对公贷款 1.1 一般贷款 按贷款期限可分为短期贷款和中长期贷款。短期贷款是指金融企业根据有关规定发放的,期限在1年(含1年)以下的各种贷款。中长期贷款是指金融企业发放的贷款期限在1年以上的各种贷款。 按提供方式不同可分为信用贷款、担保贷款等。信用贷款是指金融企…

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 &#xff08;1&#xff09;前后端的大致学习模块 &#xff08;2&#xff09;后端 &#xff08;3&#xff09;前端 二、开发模式 一、实战学习的引言 &#xff08;1&#xff09;前后端的大致学习模块 &#xff08;2&#xff09;后端 Validation&#xf…

ubuntu上通过openvswitch卸载实现roce over vxlan

环境 操作系统&#xff1a; uname -a Linux 5.4.0-187-generic #207-Ubuntu SMP Mon Jun 10 08:16:10 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux Mellanox网卡&#xff1a; ethtool -i ens6np0 driver: mlx5_core version: 23.10-2.1.3 firmware-version: 20.39.3004 (MT_0…

在Linux下查看HBA卡的速率和状态

平时在Linux下映射存储&#xff0c;都是映射哪台就给哪台插线&#xff0c;然后在存储端扫描WWPN&#xff0c;简单粗暴&#xff0c;没技术含量。当然&#xff0c;光交下也可以看。 1&#xff0c;查看当前卡的品牌&#xff0c;常用的卡有两种&#xff0c;Emulex和Qlogic。 lspc…

C语言 - 预处理详解(一)#预定义符号 ##define #undef

文章目录 前言 一、预定义符号 二、#define (一)、#define 定义的标识符 (二)、#define 定义的宏 (三)、#define 替换规则 (四)、# 和 ## 1、 # 的作用 2、## 的作用 (五)、带副作用的宏参数 (六)、宏和函数的对比 (七)、命名约定 三、#undef 总结 前言 路漫漫其修远兮&#…

C语言深度剖析--不定期更新的第五弹

const关键字 来看一段代码&#xff1a; #include <stdio.h> int main() {int a 10;a 20;printf("%d\n", a);return 0; }运行结果如下&#xff1a; 接下来我们在上面的代码做小小的修改&#xff1a; #include <stdio.h> int main() {const int a 1…

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口 int main(int argc, char *argv[]) {//…