zoukankan      html  css  js  c++  java
  • Qt 信号槽

    Qt4与Qt5的信号槽有些不同:

    1. Qt4的槽函数必须使用slots关键字声明,而Qt5中已经不再需要了,槽函数可以是任何能和信号关联的成员函数。

    2. Qt4指定信号函数和槽函数需用SIGNAL和SLOT宏,它们的功能是将参数转换为const char*类型。而Qt5中传递的是信号函数和槽函数的指针。

    3. Qt5支持编译时进行检查,信号或槽的拼写错误、槽函数参数多余信号函数等错误可以在编译时就检查出来,而Qt4不行。而且参数类型不需要一致,只要能隐式转换就行。

    4. Qt5还支持C++11的lambda表达式,可以在关联时直接编写信号发射后要执行的代码,不再需要声明定义槽函数了。

    关于connect函数的第五个参数:

    有五种类型:

    Qt::AutoConnection  自动关联  (默认)   如果接受者和发送者在同一个线程,则使用Qt::DirectConnection ,否则使用Qt::QueuedConnection。  在信号被发送时决定使用哪种关联类型。

    Qt::DirectConnection  直接关联   发射完信号后立即调用槽,只有当槽执行完后,发射信号处后面的代码才能继续执行。

    Qt::QueuedConnection  队列关联  当控制返回接受者所在的线程才执行槽函数,而且无论槽执行与否,发射信号处后面的代码都会立即执行。

    Qt::BlockingQueuedConnection  阻塞队列关联  类似于队列关联,信号线程会一直阻塞,直到槽返回。但是当接受者和发送者在同一个线程时,不能使用,否则会导致死锁。

    Qt::UniqueConnection  唯一关联  使用它后,两个对象间的相同信号和槽只能有唯一的关联。通常和其他连接类型做按位或操作。

    信号和槽还有一种自动关联方式:

    由字符串on、部件的objectName和信号名称三部分组成,中间用下划线隔开的槽函数名称可以被QT直接关联,不用再使用conncect函数。

    如on_pushButton_clicked。  不过如果这样使用,还需要进行其他的设置:使用conncectSlotsByName()函数来支持信号和槽函数自动关联。

    但不建议使用这种方式,信号和槽的关联情况不明了,对其他开发人员不友好。

  • 相关阅读:
    JWT验证
    SQLite报错: no such column:StamoRule(表名)
    .Net Core 程序报错 在上一个操作完成之前,在此上下文上启动了第二个操作。
    接口请求报错 504 Gateway Time-out
    未处理的异常:system.io.file load exception:无法加载文件或程序集“ 。。。。 找到的程序集的清单定义与程序集引用不匹配。
    好多年没回到这个园子
    模拟webpack 实现自己的打包工具
    微信小程序迁移到头条小程序工具
    手机端图片懒加载
    react系列一,react虚拟dom如何转成真实的dom
  • 原文地址:https://www.cnblogs.com/ll-10/p/10243618.html
Copyright © 2011-2022 走看看