Qt5 中关于信号槽的改动

原创 2014年06月04日 19:27:21

Qt5释出对信号/槽的新方法。保证了在编译阶段即可对信号槽使用进行检查,避免了到运行阶段才发现问题的尴尬。现将旧/新的信号槽用法进行回顾总结。

Qt4中最常用的信号槽写法:

connect(obj1, SIGNAL(fun1(param1, param2,...)), obj2, SLOT(fun2(param1,...)));
//编译后
connect(obj1, "fun1(param1, param2,...)", obj2, "fun2(param1,...)");

在程序编译阶段,程序会将函数以字符串的形式进行链接,程序不会检查信号/槽函数是否存在,只有在运行期间才会验证是否正确。

Qt5中的新语法:

connect(obj1, &ClassA::fun1, obj2, &ClassB::fun2);

编译期间就会检查信号与槽是否存在,参数类型检查,Q_OBJECT是否存在。

相比较Qt4中的语法,有了大的改进,而且槽函数不在限定必须是slot,可以是普通的函数、类的普通成员函数、lambda函数等。但是在新的语法中又带来了新问题,如果函数重载,有可能会造成程序的困扰,不知道该具体链接哪个。在此,我们有两种方法解决。

注:以下两种方法用在信号函数,或槽函数都可。

一:在使用connect函数前,对要链接的信号/槽函数使用函数指针,防止混淆。

//类函数指针。
void (ClassA::* p)(param1, param2, ....) = &ClassA::fun1;
connect(obj1, p, obj2, &ClassB::fun2);
二:在connect函数中使用c++的static_cast,来进行动态转换。

connect(obj1, static_cast<void (ClassA::*)(param1, param2, ....)>(&ClassA::fun1),
        obj2, &ClassB::fun2);





Qt5 lambda表达式连接QTcpServer信号槽

Problem当有多条语句调用而又不希望写成一个单独的模块(函数或者方法)时,对于普通的方法可以写成内联形式,避免函数调用入栈、出栈等开销,也或者可以定义一段宏,不过宏没有类型检查,也没有作用对象的概...

Qt学习笔记5-信号槽机制

以《C++ GUI Programming with Qt 4, Second Edition》为参考 前几节提到过信号槽,此次来深入了解一下信号槽机制。 信号槽机制是Qt的一个基础,...
  • judyge
  • judyge
  • 2015年05月14日 15:40
  • 340

信号与槽的新语法(Qt5)

在 Qt5 的 qtbase-staging 代码仓库的 qobject_connect_ptr 分支中已经引入了一种全新的信号与槽的语法。 参看 New Signal Slot Syntax P...

PyQt5学习笔记05----Qt Designer信号槽

先入一些信号槽的基本介绍: 信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要地方。它为高层次的事件处理自动生成所需要的附加代码。在我们所熟知的很...

QT5(4)代码实现应用及信号槽实例

一、基于Qt5的代码除了使用Qt的《设计》来快速添加控件,同样可以使用代码来添加控件。二、新建项目在新建项目过程中时取消创建界面,Qt将不会帮我们创建UI代码,需要我们手工添加。 三、添加代码1、在...

用python3+PyQt5改写Python Qt GUI快速编程的第6章实例主窗口 信号及槽如何使用

本文是对Python Qt GUI快速编程的第6章的例子MainWindow改写成python3+PyQt5的编码。改动中,本人发现了不少的坑要改动,下文大概列出一些需要更改的重点,并且附上改动后的代...

Qt5中通过信号槽传递多个参数

在Qt中的信号槽机制中,信号能参数超过6个则会

Qt5信号与槽C++11风格连接简介

最近在论坛上看到了这个方面的问题,详见这里。 随后浅浅地学习了一下子,看到了Qt官方论坛上给出的说明,觉得C++11的functional连接方法还是比Qt4既有的宏连接方法有很大不同。 传统的Qt...

信号与槽的新语法(Qt5)

在 Qt5 的 qtbase-staging 代码仓库的 qobject_connect_ptr 分支中已经引入了一种全新的信号与槽的语法。 参看 New Signal Slot Syntax ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt5 中关于信号槽的改动
举报原因:
原因补充:

(最多只允许输入30个字)