Qt基础学习
一、Qt 快捷键:
Ctrl + /快速注释
Ctrl + r 允许
Ctrl + b 编译
Ctrl + shift + 向上的箭头整行移动
Ctrl + I 自动对齐
F4 同名文件切换
F1 /左侧按钮 帮助文档
二、Qt.pro文件
TARGET 指向的的名字可以修改,修改工程名
TEMPLATE 指向的是模板
SOURCE 指向的是源文件
HEADERS 指向的是头文件
当我们创建一个类时,.pro文件就会自动增加数据
如果需要添加一些模块,我们可以在这直接写
三、Qt类的结构
1、基类的关系
- QMainWindow 是主窗口类,主窗口具有主菜单栏、工具栏和状态栏,类似于一般的应用程序的主窗口;
- QWidget 是所有具有可视界面类的基类,选择 QWidget 创建的界面对各种界面组件都可以 支持;
- QDialog 是对话框类,可建立一个基于对话框的界面;
2、对象树
从上到下构造,从下到上析构,只要指定了父亲,对象便会被自动挂到对象树中,析构的时候就会自动释放堆
3、Qdebug()的打印顺序
我们验证析构的时候却发现,第一个打印的并不是子类,
这只是Qdebug()的问题,他是先从父到下打印再从下到上析构的
4、Qt坐标轴
四、Qt的一些宏以及元对象编译器
1、moc
元对象编译器:
只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用信号槽,必须继承QObject。凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT。不管是不是使用信号槽,都应该添加这个宏。这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,就是错误的。其它很多操作都会依赖于这个宏。
Qt的信号/槽和属性系统都基于其能在运行时刻对对象进行实时考察的功能。实时考察意味着即使在运行过程中也可以列出一个对象有哪些方法(成员函数)和属性,以及关于它们的各种信息(比如参数类型)。如果没有实时考察这个功能,QtScript 和 QML 就基本不可能实现了。
C++本身不提供对实时考察的支持,所以Qt就推出了一个工具来提供这个支持。这个工具就是MOC。注意,它是一个代码生成器,而不是很多人说的“预编译器”。
MOC会解析头文件并为每一个含有Q_OBJECT宏的头文件生成一个对应的C++文件(这个文件会跟工程中的其他代码一块参与编译)。这个生成的C++文件包含了实时考察功能所需的全部信息(文件一般被命名为moc_HeaderName。cpp)。
参考:
https://blog.51cto.com/u_14582976/2828696
https://www.cnblogs.com/lsgxeva/p/12153288.html
2、emit
Emit在
qobjectdefs.h头文件中是空的宏定义,没有任何实际意思(除了对开发者有提示作用)
3、Signals
Signal则是public的宏,在Qt4之前是protected的宏,QT5之后才是Public的宏
4、Slots
Slots也是空的宏定义
五、信号与槽
1、槽函数,就是信号的处理
2、自定义信号
3、自定义槽函数
必须先用信号建立消息映射,再调用执行
4、自定义的信号与槽发生重载问题的解决
(一)、如下图,一个是有参的。一个是无参的信号与槽,如果我门用之前的方法是指不到带参函数的
(二)、为了解决connect的重载问题,需要创建函数指针,来填充connect函数:
(三)、输出的时候我们发现,这个QStirng字符串自带引号,为了不带引号,我们需要把QString类型转化成Char *类型
5、信号连接信号
(一)、
就这样连接,没什么好说的...
6、断开信号
断开信号:discnnect
7、Qt4版本信号与槽函数连接的写法:
8、注意事项(小节)
注意信号与槽函数的参数问题
六、又遇Lambda表达式
1、Lambda直接作为函数使用
在Lambda表达式后面加(),这是直接将Lambda当函数使用了,之前学stl的时候只见过他作为回调函数使用,长见识了...
2、Lamdba表达式的各个组成
3、用Lambda当作函数使用
用Lambda实现判断素数:
4、Lambda设置connect连接
甚至可以省略原来第三个参数this
七、阶段性作业
1、要求
用Qt创建一个按钮,设置按钮的文本为"打开一个窗口",点击这个按钮,弹出一个窗口,同时按钮上的文本变为”关闭这个窗口”;再次点击按钮则关闭这个窗口
2、所用函数(包含之前上课时用到的常用函数)
Show() //显示按钮
setParent() //设置父亲
setText()//设置文本
resize() //重置窗口大小//
setFixedSize() //固定窗口大小//
move() //移动btn按钮//
setWindowTitle //设置窗口标题//
3、代码
关键代码如下...
很简单,就不贴全码了
__EOF__

本文链接:https://www.cnblogs.com/lordtianqiyi/articles/15808206.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现