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、调用有无参构造,指定父组件,构造一个lab
    QLabel *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.mfbz.cn/a/872850.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手机扬声器音量总是不够大?试试“扬声器助推器”吧

手机的扬声器音量总是不够大&#xff0c;尤其是在嘈杂的环境中&#xff0c;音乐和视频的声音总是不太清晰。直到我发现了这款“扬声器助推器”&#xff0c;我的手机音质瞬间提升了好几个档次。 软件简介&#xff1a; “扬声器助推器”利用先进的音频处理技术&#xff0c;能够…

vivado error:Combinatorial Loop Alert:1 LUT cells form a combinatorial loop

VIVADO ERROR :Combinatorial Loop Alert&#xff1a;1 LUT cells form a combinatorial loop vivao生成bit流时发生报错&#xff0c;如下图所示定位原因解决 vivao生成bit流时发生报错&#xff0c;如下图所示 定位原因 在三段式状态机中&#xff0c;组合逻辑代码if else 语句…

STM32:TIM定时中断配置的最全库函数讲解笔记

声明&#xff1a;本博客为哔哩哔哩up主江协科技 “STM32入门教程”的听课笔记&#xff0c;仅供学习、参考使用&#xff0c;不得用作其他用途&#xff0c;违者必究。如有版权问题&#xff0c;请联系作者修改。 目录 一、综述 二、TIM库 初始化 2.1、TIM_DeInit 恢复缺省值 …

IPv6 Sec机制的深度解析与优势探讨

IPv6的sec机制&#xff0c;主要指的是IPv6协议中内置的安全机制&#xff0c;特别是通过IP Sec协议集来实现的。IPv6在设计之初就考虑到了安全性问题&#xff0c;并内置了对IP Sec的支持&#xff0c;这使得IPv6网络在安全性能上相比IPv4有了显著的提升。 IP Sec协议集主要由认证…

Android Studio打开Modem模块出现:The project ‘***‘ is not a Gradle-based project

花了挺长时间处理该问题&#xff0c;特记录如下&#xff1a;1.背景&#xff1a; 在Android studio 下导入一个新增的modem模块&#xff0c;如MPSS.DE.3.1.1\modem_proc\AAA, 目的是看代码方便一些&#xff0c;可以自由搜索各种关键字。但导入该项目时出现了如下错误&#xff1a…

好用的AI编程助手[豆包]

欢迎来到 Marscode 的世界&#xff01;这里将为你揭秘 Marscode&#xff0c;它的独特之处、应用领域等相关精彩内容等你来探索。 一、打开VS Code 二、选择 Extensions,搜索marscode 三、点击安装 四、点击使用 五、输入需要编写的代码 六、根据自己的需求修改代码 MarsCode 注…

RabbitMQ 应用

文章目录 前言1. Simple 简单模式2. Work Queue 工作队列模式3. Pubulish/Subscribe 发布/订阅模式Exchange 的类型 4. Routing 路由模式5. Topics 通配符模式6. RPC RPC通信7. Publisher Confirms 发布确认1. 单独确认2. 批量确认3. 异步确认 前言 前面我们学习了 RabbitMQ 的…

学习笔记--MybatisPlus

官网&#xff1a;MyBatis-Plus &#x1f680; 为简化开发而生 快速入门 入门案例 引入MybatisPlus的起步依赖 定义Mapper 问题&#xff1a; MybatisPlus中Invalid bound statement (not found): com.itheima.mp.mapper.UserMapper.insert 一定要指定实体类&#xff01;&am…

GDB watch starti i files

watch break starti 在程序的最初开始运行的位置处断下来 ​​ i files 查看程序及加载的 so 的 sections ​​

遍历有向网格链路实现

在实际的业务中&#xff0c;我们可能遇到复杂规则&#xff08;多个或与条件组合&#xff09;&#xff0c;复杂链路等类似场景问题&#xff0c;如&#xff1a;规则引擎相关业务&#xff0c;生产任务排期等。 复杂链路示意图如下&#xff1a; 复杂网路链路场景描述 有一个或多…

机器学习如何用于音频分析?

机器学习如何用于音频分析&#xff1f; 一、说明 近十年来&#xff0c;机器学习越来越受欢迎。事实上&#xff0c;它被用于医疗保健、农业和制造业等众多行业。随着技术和计算能力的进步&#xff0c;机器学习有很多潜在的应用正在被创造出来。由于数据以多种格式大量可用&…

EasyExcel实现复杂Excel的导入

最近项目中遇到一个复杂的Excel的导入&#xff0c;并且数据量较大。因为数据不规则&#xff0c;所以只能使用POI进行自定义读取&#xff0c;但是发现数据量大之后&#xff0c;读取数据非常耗时。后面换成EasyExcel&#xff0c;性能起飞。 1. Excel样板 如上图&#xff0c;需要…

USB - 笔记

1.USB接口区分 2 充电宝 图中提到的各种充电协议都是用于快速充电技术的标准,适用于不同品

Chrome 浏览器插件获取网页 window 对象(方案三)

前言 最近有个需求&#xff0c;是在浏览器插件中获取 window 对象下的某个数据&#xff0c;当时觉得很简单&#xff0c;和 document 一样&#xff0c;直接通过嵌入 content_scripts 直接获取&#xff0c;然后使用 sendMessage 发送数据到插件就行了&#xff0c;结果发现不是这…

JAMA network open|自动化定量评估胃肠道肿瘤中三级淋巴结构的机器学习模型|文献精析·24-09-07

小罗碎碎念 这篇文章报道了一种基于机器学习模型的自动化方法&#xff0c;用于在常规组织病理学图像中检测和分类胃肠道癌症中的三级淋巴结构&#xff0c;并验证了其与患者生存预后的关联。 在这项多中心诊断/预后研究中&#xff0c;开发了一种基于机器学习的计算工具&#xff…

【pyhton】python如何实现将word等文档中的文字转换成语音

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存&#xff08;存储&#xff09; 1.2、研究目的 如何存储数据&#xff08;变量&#xff0c;数组....)程序数据结构算法 1.3、常见保存数据的方法 数组&#xff1a;保存自己的数据指针&#xff1a;是间接访问已经存在的…

移远通信高端5G智能模组SG560D-NA率先通过PTCRB认证

近日&#xff0c;移远通信宣布&#xff0c;其基于高通QCM6490平台打造的高端5G智能模组SG560D-NA顺利通过PTCRB认证。 在此之前&#xff0c;该模组还获得了美国FCC和加拿大IC认证&#xff0c;这意味着&#xff0c;其已完全满足北美地区的相关标准和规定&#xff0c;能够支持相关…

【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)

Function Calling是大模型连接外部世界的通道&#xff0c;目前出现的插件&#xff08;Plugins &#xff09;、OpenAI的Actions、各个大模型平台中出现的tools工具集&#xff0c;其实都是Function Calling的范畴。时下大火的OpenAI的GPTs&#xff0c;原理就是使用了Function Cal…

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…