QT跨线程连接信号和槽

来源:互联网 发布:mac ariana grande 编辑:程序博客网 时间:2024/05/17 20:47

对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新提供方式的优点介绍如下:


0 0
原创粉丝点击