【转帖请注明出处:blog.csdn.net/lanmanck】
用了qthread后,自然想起给gui线程发送数据。
在qt4中,QCustomEvent已经不使用了。因为qthread是从QObject继承的,所以可以使用signal,slot机制来通信。
1、在线程定义signal:
class aa:public QThread
{
Q_OBJECT
...
signals:
void sendData(char*p,int len);
}
然后在线程的cpp里面发射此信号:
emit sendData(buf,124);
注意:不需要实现此函数,因为此函数被连接到下面的slot了。
2、在gui线程,或者别的线程里面建立slot来接受此信号:
头文件:
class MyGUIClass:public QMainWindow
{
private slot:
void receiveData(char*p,int len);
}
cpp文件:
在构造函数里先connect:
aa1 = new aa();
connect(aa1,SIGNAL(sendData(char*p,int len)),this,SLOT(receiveData(char*p,int len));
然后实现这个接收函数:
void MyGUIClass:receiveData(char*p,int len)
{
//
}
构建过程有点罗嗦,没有mfc简单。
注意:定义signals后,要加上Q_OBJECT,并且要make distclean.否则连接的时候提示找不到那个signal函数。