当前位置: 首页 > news >正文

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

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;");    //设置样式表//****************************行编辑器设置************************//设置行编辑器1QLineEdit *edit1 = new QLineEdit;edit1->setParent(this);          //指定父组件edit1->resize(200, 30);          //重新设置大小edit1->move(170,200);//设置行编辑器2QLineEdit *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);//调用有有参构造,指定父组件,构造一个labQLabel *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()<<"登录成功!";elseqDebug()<<"账号或密码错误,登录失败!";});//取消登录btn2connect(btn2,&QPushButton::clicked,[=](){this->close();});}Widget::~Widget()
{delete ui;
}

思维导图

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 衡石分析平台使用手册-部署前准备
  • 如何快速撰写毕业论文任务书
  • 遍历有向网络链路实现
  • 初学者如何掌握python
  • nlohmann::json中有中文时调用dump转string抛出异常的问题
  • 瑞吉外卖—读写分离
  • 机器学习:opencv图像识别--模版匹配
  • 华为OD机试真题E卷-计算网络信号(含题目描述+解题思路+代码解析)
  • 前端打包装包——设置镜像
  • 机试算法模拟题 服务中心选址
  • 利用命令模式构建高效的手游后端架构
  • Reflection反射——Class类
  • 大模型训练数据库Common Crawl
  • Python判断两张图片的相似度
  • 汽车免拆诊断案例 | 2013款捷豹XF车偶尔无法起动
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Javascript弹出层-初探
  • MySQL-事务管理(基础)
  • node-glob通配符
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Twitter赢在开放,三年创造奇迹
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 翻译:Hystrix - How To Use
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 优秀架构师必须掌握的架构思维
  • C# - 为值类型重定义相等性
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​ubuntu下安装kvm虚拟机
  • # SpringBoot 如何让指定的Bean先加载
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #java学习笔记(面向对象)----(未完结)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)STL算法之遍历容器
  • (21)起落架/可伸缩相机支架
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (简单) HDU 2612 Find a way,BFS。
  • (力扣)1314.矩阵区域和
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十一)c52学习之旅-动态数码管
  • (四)c52学习之旅-流水LED灯
  • (一)基于IDEA的JAVA基础10
  • (转)母版页和相对路径
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net core 6.0 升8.0
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET6 命令行启动及发布单个Exe文件
  • .net6使用Sejil可视化日志
  • .NET大文件上传知识整理