QT

作者: 懒生活 | 来源:发表于2022-04-19 15:25 被阅读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)当信号的参数与槽参数数量不同的时候,必须保证信号的参数比较多。且前面相同数量的参数类型保持一致。信号中多余的参数会被槽忽略。

    相关文章

      网友评论

          本文标题:QT

          本文链接:https://www.haomeiwen.com/subject/siisertx.html