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

QT核心内容(9.6)

1>    手写unique_ptr智能指针

代码:

#include <iostream>
#include <cassert>using namespace std;
template<typename T>
class my_unique_ptr {
private:T* ptr;// 禁止拷贝构造函数和拷贝赋值操作符my_unique_ptr(const my_unique_ptr&) = delete;my_unique_ptr& operator=(const my_unique_ptr&) = delete;public:// 默认构造函数my_unique_ptr() : ptr(nullptr) {}// 构造函数,接受一个指针explicit my_unique_ptr(T* p) : ptr(p) {}// 移动构造函数my_unique_ptr(my_unique_ptr&& other) noexcept : ptr(other.ptr) {other.ptr = nullptr;}// 移动赋值操作符my_unique_ptr& operator=(my_unique_ptr&& other) noexcept {if (this != &other) {delete ptr;ptr = other.ptr;other.ptr = nullptr;}return *this;}// 析构函数~my_unique_ptr() {delete ptr;cout<<"my_unique_ptr 析构"<<endl;}// 解引用操作符T& operator*() const {assert(ptr != nullptr);return *ptr;}// 箭头操作符T* operator->() const {assert(ptr != nullptr);return ptr;}// 释放所有权T* release() noexcept {T* temp = ptr;ptr = nullptr;return temp;}// 重置指针void reset(T* p = nullptr) {if (ptr != p) {delete ptr;ptr = p;}}// 检查是否为空bool operator==(nullptr_t) const noexcept {return ptr == nullptr;}// 检查是否非空bool operator!=(nullptr_t) const noexcept {return ptr != nullptr;}
};// 使用示例
class Test {
public:Test() { cout << "Test 构造"<<endl; }~Test() { cout << "Test 析构"<<endl; }void sayHello() { cout << "Hello"<<endl; }
};int main() {my_unique_ptr<Test> ptr(new Test());ptr->sayHello();// ptr.reset(); // 取消注释以提前释放资源return 0; // Test 对象在这里被自动销毁
}

运行结果:


2>    手写登录界面,不允许拖拽,要求尽可能的美观

代码:

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>      //QT中信息调试类,用于输出数据,无需使用该类实例化对象,直接使用成员函数即可
#include <QIcon>
#include <QPushButton>
#include <QLabel>
#include <QMovie>
#include <QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->resize(400,300);          //更改当前界面的尺寸this->setMaximumSize(1000,900); //设置最大尺寸this->setMinimumSize(200,100);  //设置最小尺寸this->setFixedSize(500,300);    //设置固定尺寸//设置窗体图标this->setWindowIcon(QIcon("D:\\24061C++\\QT_day2\\1.png"));/**********************有关按钮的操作***********************///构造按钮时,直接指定父组件QPushButton *btn1 = new QPushButton(this);btn1->setText("注册");btn1->move(0,260);                    //移动按钮位置btn1->resize(80,40);                    //设置按钮尺寸btn1->setIcon(QIcon("D:\\24061C++\\QT_day2\\pictrue\\zhuce.png"));                   //设置按钮图标//构造按钮时,指定父组件并且设置文本内容QPushButton *btn2 = new QPushButton("确定",this);btn2->resize(btn1->size());btn2->move(150,200);btn2->setIcon(QIcon("D:\\24061C++\\QT_day2\\pictrue\\queding.png"));//构造函数时,指定父组件并设置文本内容,并设置按钮图标QPushButton *btn3 = new QPushButton(QIcon("D:\\24061C++\\QT_day2\\pictrue\\quxiao.png"),"取消",this);btn3->resize(btn1->size());btn3->move(btn2->x()+btn2->width()+50,btn2->y());/************************标签文本*****************************///1、使用无参构造完成构造一个标签QLabel *lab1 = new QLabel;lab1->setParent(this);          //设置父组件lab1->setText("账号:");         //设置文本内容lab1->move(100,110);     //设置坐标//2、使用有参构造完成构造一个标签QLabel *lab2 = new QLabel("密码:",this);lab2->move(lab1->x(),lab1->y()+40);//3、调用有无参构造,指定父组件,构造一个labQLabel *lab3 = new QLabel(this);lab3->resize(500,100);lab3->setStyleSheet("background-color:pink;");//给标签设置动图//创建一个mocie对象QMovie *movie = new QMovie("D:\\24061C++\\QT_day2\\pictrue\\zz.gif");//将动图对象放入标签中lab3->setMovie(movie);//让动图动起来movie->start();//让标签内容自适应大小lab3->setScaledContents(true);//给标签设置静态图lab1->resize(30,30);lab1->setPixmap(QPixmap("D:\\24061C++\\QT_day2\\pictrue\\userName.jpg"));lab1->setScaledContents(true);lab2->resize(30,30);lab2->setPixmap(QPixmap("D:\\24061C++\\QT_day2\\pictrue\\passwd.jpg"));lab2->setScaledContents(true);/******************行编辑器类(QLIneEdit)***********************///1、使用无参构造,构造一个行编辑器QLineEdit *edit1 = new QLineEdit;edit1->setParent(this);             //指定一个父组件edit1->resize(300,30);               //重新设置大小edit1->move(lab1->x()+lab1->width()+2,lab1->y());           //移动位置edit1->setPlaceholderText("账号");            //设置占位文本//2、使用有参构造完成构造一个行编辑器QLineEdit *edit2 = new QLineEdit("密码",this);edit2->resize(300,30);              //重新设置大小edit2->move(lab2->x()+lab2->width()+2,lab2->y());            //移动位置edit2->clear();             //清空内容edit2->setPlaceholderText("密码");            //设置占位文本edit2->setEchoMode(QLineEdit::Password);     //设置回显模式}Widget::~Widget()
{delete ui;
}

运行结果:

3>    思维导图


http://www.mrgr.cn/news/21097.html

相关文章:

  • 【2024高教社杯全国大学生数学建模竞赛】B题完整解析(含论文、代码分享)
  • 代码随想录算法训练营第38天 | LeetCode322.零钱兑换、LeetCode279.完全平方数、LeetCode139.单词拆分、56. 携带矿石资源
  • Android12 MTK 二级菜单拖拽图标到主屏时出现图标重复
  • s let 和const的区别 ,它们可以变量提升吗
  • python转换并提取pdf文件中的图片
  • SpringBoot整合Minio及阿里云OSS(配置文件无缝切换)
  • Spring事务
  • 【Qt】事件的处理
  • pytorch torch.einsum函数介绍
  • RAML学习
  • Java反射
  • 学习Linux
  • UDP通信实现
  • 常工院星闪节能团队参加悉尼大学设计交流项目
  • JDK新特性
  • 数据结构-----栈 、队列
  • Java Spring Boot 项目中的密码加密与验证开发案例手册
  • C++隐式类型转换问题
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • ​​NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002