Qt 多线程信号传递


1. QObject::connect(const QObject * sender, const char * signal, 
2. const QObject * receiver, const char * method, 
3. Qt::ConnectionType type = AutoConnection);


信号,若想要把信号传递给另外一个线程下运行的类实例,必须要修改type的枚举值。

Qt::QueuedConnection,这样就能传递给其他线程下的类实例了。

Qt支持的元数据类型,如int、QString等,若要传递自定义的数据类型,必须把自定义的数据类型注册为元数据类型。

举个例子,比如我再两个线程下分别运行了两个类实例MainWindow *mainWnd和Manager *mngr,MainWindow把方法addUsers(LPHOSTSTRUCT )设为槽,Manager把方法NewUserCome(LPHOSTSTRUCT )设为消息,其中LPHOSTSTRUCT为自定义的数据类型。要是想在Manager中顺利的使用emit NewUserCome(lpHost)(lpHost为LPHOSTSTRUCT的一个实例),就要经过两步

一、注册LPHOSTSTRUCT为Qt的元数据类型


1. qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT");

信号和槽,这里要注意修改connect方法的第五个参数


1. QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT)));

Qt 多线程信号传递 实例的内容介绍完了,希望本文能帮你解决问题。


原网址:


Qt 多线程信号传递


1. QObject::connect(const QObject * sender, const char * signal, 
2. const QObject * receiver, const char * method, 
3. Qt::ConnectionType type = AutoConnection);


信号,若想要把信号传递给另外一个线程下运行的类实例,必须要修改type的枚举值。

Qt::QueuedConnection,这样就能传递给其他线程下的类实例了。

Qt支持的元数据类型,如int、QString等,若要传递自定义的数据类型,必须把自定义的数据类型注册为元数据类型。

举个例子,比如我再两个线程下分别运行了两个类实例MainWindow *mainWnd和Manager *mngr,MainWindow把方法addUsers(LPHOSTSTRUCT )设为槽,Manager把方法NewUserCome(LPHOSTSTRUCT )设为消息,其中LPHOSTSTRUCT为自定义的数据类型。要是想在Manager中顺利的使用emit NewUserCome(lpHost)(lpHost为LPHOSTSTRUCT的一个实例),就要经过两步

一、注册LPHOSTSTRUCT为Qt的元数据类型



    1. qRegisterMetaType<LPHOSTSTRUCT> ("LPHOSTSTRUCT");



    信号和槽,这里要注意修改connect方法的第五个参数


    1. QObject::connect(mngr, SIGNAL(NewUserCome(LPHOSTSTRUCT)), mainWnd, SLOT(addUser(LPHOSTSTRUCT)));


    Qt 多线程信号传递 实例的内容介绍完了,希望本文能帮你解决问题。