QT

2022-04-19  本文已影响0人  懒生活

vs2019下QT环境搭建

下载qt5.14 https://download.qt.io/archive/qt

其他高版本只能在线安装或者编译源安装了。
下载后安装,平台选着vs就好。不确定就全选。

在vs插件管理中下载并安装qt插件

安装插件重启vs后。注意在vs的配置选项中找到QT==>Version==>add new qt version. 指定需要的qt版本的qmake。

QT学习

教程 https://zetcode.com/gui/qt5

1 为什么需要QCoreApplication a(argc,argv)

qt的非控制台程序在创建的时候都会有

QCoreApplication a(argc,argv);
...
return a.exec();

的结构。
实际上不要这QCoreApplication a这个对象简单的程序也是可以运行的。QCoreApplication对象的存在,为程序引入了事件处理循环和一些遍历的静态函数。在这个循环里面我们的程序可以得到一些便利。比如可以利用静态函数applicationDirPath获取程序的当前运行路径。
比如还可以利用applicationVersion()获取程序的版本信息。程序版本信息可以在vs+qt的项目工程的Resource Files目录下添加version.rc实现。

2为什么定义Q_OBJECT 宏

当类中用到了qt自定义的关键字的时候,需要再类前面声明这个Q_OBJECT宏,否则编译器会报错。

3 QT new出的对象需要手动delete吗

’’’
MainWindow w;
QLabel *label = new QLabel("hello",&w);
QLabel *label1 = new QLabel("hello");
’’’
label 在new的时候指定了父对象w, w销毁的时候,他的所有子对象会自动销毁。所以不需要手动delete
没有指定父子关系的label1就需要手动删除了。

4 QT按键事件

按键事件会发给当前激活的窗口,每个继承与Qwidget的窗口,都绑定了keyPressEvent处理按键信号,如果需要该窗口对按键信号做特殊处理,需要重载这个函数。
类似的如窗口移动事件, 鼠标操作等事件都需要通过重载对应的slot函数。

取消slot与信号的关联

使用disconnect 取消signal和slot的关联
使用connect关联signal和slot。

如果一个信号连接了多个槽

槽的执行顺序和connect的编写顺序一致。

定时器的使用

startTimer(1000);这样的语句会让语句所在的窗口,没1000ms产生一个定时器事件。定时器事件的处理函数需要重载实现。starttimer函数会返回一个当前定时器的index。如果要删除该定时器通过killTimer(index)可以实现。
通过定时器事件e->timerId() 可以查到发送该定时器事件的定时器index。

检测qt程序的内存泄露工具

VLD https://blog.csdn.net/dyw/article/details/6860473

信号与槽之间的参数传递

传递是自动的要,要确保两点
1)当信号和槽函数参数数量相同的时候,他们参数类型要完全一致。
2)当信号的参数与槽参数数量不同的时候,必须保证信号的参数比较多。且前面相同数量的参数类型保持一致。信号中多余的参数会被槽忽略。

上一篇下一篇

猜你喜欢

热点阅读