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)当信号的参数与槽参数数量不同的时候,必须保证信号的参数比较多。且前面相同数量的参数类型保持一致。信号中多余的参数会被槽忽略。
网友评论