对QT的信号和槽理解较为初级,今天通过多次尝试,终于学会了跨线程连接信号和槽。其基本方法如下。
1. 无参数传递时
(1)定义:
signal:
void signal1();
(2)连接部分写法:
connect( p_class1, //类1的指针
SIGNAL(signal1()), //类1的信号
p_class2, // 类2的指针
SLOT(slot_func2())); //类2的槽函数
(3)释放信号写法:
emit signal1();
2. 有参数传递时
(1)定义:
signal:
void signal1(TYPE);
(2)连接部分写法:
connect( p_class1, //类1的指针
SIGNAL(signal1(TYPE)), //类1的信号
p_class2, // 类2的指针
SLOT(slot_func2(TYPE))); //类2的槽函数
(3)释放信号写法:
emit signal1(type_example);
3.注意的问题
根据查阅网上资料,信号的参数和槽的参数必须符合以下两种情况之一:
(1)信号的参数和槽的参数数量相同、类型一一对应也相同。
(2)信号的参数多于槽的参数,但与槽的参数对应的信号中的参数类型应一一对应相同。
另外,QT5中关于信号和槽的绑定针对QT4有了较大改进,提供了一种新的绑定方式:
connect( p_class1, //类1的指针
&CLASS1::signal1; //类1的信号
p_class2, // 类2的指针
&CLASS2::func2; //类2的函数
这两种方式的区别可在网上找到比较好的解释。在《QT5编程入门》(霍亚飞等编著)一书中,对QT5新提供方式的优点介绍如下: