Qt入门指南:从GUI到信号槽(初识)
本文介绍了Qt开发的基础知识,主要包括GUI与CLI的区别、Qt项目结构、信号与槽机制以及图片显示方法。文章首先对比了命令行界面(CLI)和图形用户界面(GUI)的特点,阐述了事件驱动机制。随后详细讲解了Qt项目的创建过程、文件组织结构、main.cpp和MainWindow类的作用,比较了UI设计器和纯代码两种开发方式的优缺点。重点介绍了信号与槽机制,包括预设信号与槽的关联、自定义槽函数实现等。
文章目录
Qt基础
GUI VS CLI
CLI 命令行

GUI 图形化界面
同时
事件驱动
第一个qt项目


配置编译工具

项目的组织结构

main.cpp

MainWindow类
ui成员 指向的内容是ui文件绘制的。

UI::MainWindow 在代码书写时,是不存在的。他是用户画出来的,在编译时产生。

用纯代码的方式添加UI元素
能不能继承std::string ?
不能,因为QMainWindow 的析构函数是虚函数,std::string 的析构函数不是虚函数


两种用法的适用场景
ui 文件 写的人痛苦,看的人舒服
纯代码 写的人很舒服,看的人痛苦
两者结合一般:大框架 用ui文件,小细节 用纯代码
初步了解信号和槽

使用设计模式,预设的信号关联预设的槽函数

使用设计模式,预设的信号关联自定义的槽函数


实现是,在设计模式的ui中加入 text ,点击按钮,text 变化,不是hello,变为hello,是hello,变为world。
在写代码时,因为lable在ui中,所以用ui进行访问。

析构函数在C++中的行为与其他普通成员函数(包括虚函数)有一些重要的不同点。尽管它们都涉及到继承和多态性,但在具体实现细节和使用上存在差异。以下是析构函数与普通虚函数机制的主要区别:
1. 调用顺序
- 析构函数:当一个对象被销毁时,首先调用派生类的析构函数,然后依次调用基类的析构函数,直到最顶层的基类。这个顺序是自底向上的,即从派生程度最高的类到基类。
- 普通虚函数:当通过基类指针或引用调用虚函数时,实际调用的是指向对象的实际类型对应的版本。这个过程是动态绑定的,但不存在像析构函数那样的自底向上调用链。
2. 自动调用
- 析构函数:在对象生命周期结束时,析构函数会被自动调用。如果基类的析构函数被声明为虚函数,那么通过基类指针删除派生类对象时,会首先调用派生类的析构函数,然后是每个基类的析构函数。这种机制确保了所有资源都被正确释放。
- 普通虚函数:需要显式调用,无论是直接通过对象、引用还是指针进行调用。不会自动触发。
3. 继承和覆盖
- 析构函数:虽然可以说派生类“覆盖”了基类的虚析构函数,但实际上更准确地说是派生类提供了一个自己的析构逻辑,这使得对象销毁时能按正确的顺序清理资源。即使不显式定义析构函数,编译器也会生成一个默认的析构函数,并且如果基类有虚析构函数,派生类的默认析构函数也是虚的。
- 普通虚函数:派生类可以覆盖基类的虚函数来提供特定于该类的行为。这是典型的多态行为,允许根据对象的实际类型调用相应的函数版本。
4. 实现细节
- 析构函数:涉及复杂的清理工作,包括释放资源、调用成员变量的析构函数等。因为析构函数可能需要访问基类的保护成员,所以它们的调用机制设计得更为复杂。
- 普通虚函数:主要关注于运行时动态分发方法调用,其内部实现通常依赖于虚函数表(vtable),但相比析构函数来说,其执行上下文相对简单。
总结
虽然析构函数和其他虚函数都支持多态,但它们的设计目标和实现方式有显著的区别。特别是析构函数的调用遵循严格的顺序,并且涉及到资源的释放和对象的彻底清理,而普通虚函数主要用于实现运行时的方法重写和多态行为。因此,在使用C++时,理解这些差异对于避免内存泄漏和其他资源管理问题至关重要。
使用纯代码的方式,预设的信号,自定义的槽函数
- 找到发送方和接收方
发送方 button
接收方 MainWindow
- 设计接受方的槽函数

-
关联发送方的信号与接受方的槽函数
- 在发送方和接收方对象构造完成之后
- QObject :: connect

显示一张图片
设计模式显示
资源
- 找到资源,复制到项目所在文件夹
- 创建一个qru文件

- 新建一个textlabel,并修改属性

纯代码模式显示
- 将资源拷贝到项目的文件夹
- 新建一个qrc文件
- 根据资源的路径构造Qpixmap
- 调用label的setPixmap方法

更多推荐





所有评论(0)