您的位置:首页 > 健康 > 养生 > QT核心内容(9.6)

QT核心内容(9.6)

2024/12/21 23:57:17 来源:https://blog.csdn.net/m0_69261119/article/details/141969232  浏览:    关键词: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>    思维导图

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com