精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

實現QT元類型和QT線程通信

移動開發
本文介紹的是實現QT元類型和QT線程通信,文中詳細介紹了如何實現,我們先來看內容。

實現QT元類型QT線程通信是本文將要介紹的內容,不多說廢話,先來看內容。今天調試QT線程通信的程序時,突然發現如下消息:

實現QT元類型和QT線程通信

其中PEOPLE只是我定義的枚舉類型即enum PEOPLE。然后在Qt的信號-槽函數的參數中使用了這個枚舉型,在發送信號時就出現了上述警告。上面警告的大概意思是信號隊列中無法使用PEOPLE類型,要使用qRegisterMetaType()注冊該類型后方可使用。

通常使用的connect,實際上最后一個參數使用的是Qt::AutoConnection類型:(友們,點擊之后,就會放大,不好意思,影響你視覺了)

實現QT元類型和QT線程通信

Qt支持6種連接方式,其中3中最主要:

Qt::DirectConnection(直連方式)

當信號發出后,相應的槽函數將立即被調用。emit語句后的代碼將在所有槽函數執行完畢后被執行。(信號與槽函數關系類似于函數調用,同步執行)

Qt::QueuedConnection(排隊方式)

當信號發出后,排隊到信號隊列中,需等到接收對象所屬線程的事件循環取得控制權時才取得該信號,調用相應的槽函數。emit語句后的代碼將在發出信號后立即被執行,無需等待槽函數執行完畢。(此時信號被塞到信號隊列里了,信號與槽函數關系類似于消息通信,異步執行)

Qt::AutoConnection(自動方式)

Qt的默認連接方式,如果信號的發出和接收這個信號的對象同屬一個線程,那個工作方式與直連方式相同;否則工作方式與排隊方式相同。

我的項目中的確跨線程使用了PEOPLE為參數類型的信號,因此使用的應當是排隊方式的信號-槽機制,出現“隊列中無法使用PEOPLE類型”的警告信息就可以理解了。放狗搜了一圈,有篇文章提供了個這樣的解決方案:

  1. connect(cm, SIGNAL(sendLog(QUuid, QByteArray, bool)),   
  2.             this,SLOT(sendRes(QUuid,QByteArray,bool)));  

改為:

  1. connect(cm, SIGNAL(sendLog(QUuid, QByteArray, bool)),   
  2.             this,SLOT(sendRes(QUuid,QByteArray,bool)));  

 

這樣做的確能使警告信息消失,因為Qt官方文檔寫了:

  1. With queued connections, the parameters must be of types that are known to Qt's meta-object system,   
  2. because Qt needs to copy the arguments to store them in an event behind the scenes. 

即使用排隊方式的信號-槽機制,Qt的元對象系統(meta-object system)必須知道信號傳遞的參數類型。這里手動改為直連方式,Qt的元對象系統就不必知道參數類型了,于是警告信息消失。但這樣做是不安全的,見Qt官方文檔:

  1. Be aware that using direct connections when the sender and receiver live in different threads is unsafe if   
  2. an event loop is running in the receiver's thread, for the same reason that calling any function on an obje  
  3. ct living in another thread is unsafe. 

因此,咱還是老老實實地用qRegisterMetaType()注冊類型吧

我寫的線程通訊方法是采用信號槽機制,通常情況下,信號和槽機制可以同步操作,這就意味著在發射信號的時候,使用直接函數即可以立刻調用連接到一個信號上的多個槽。然而,當連接位于不同線程中的對象時,這一機制就會變得不同步起來,可以通過剛才介紹的,修改QObject::connect()的第5個可選參數而改變。

connect的第五個參數Qt::QueuedConnection表示槽函數由接受信號的線程所執行,如果不加表示槽函數由發出信號的次線程執行。當傳遞信號的參數類型不是QT的元類型時要先注冊,關于QT的元類型可以參看QT文檔。

QMetaType這個類里面列舉了所有的元類型。

以枚舉PEOPLE為例,注冊時首先Q_DECLARE_METATYPE(PEOPLE);

然后,int id=qRegisterMetaType<PEOPLE>("PEOPLE");

加上這兩句就注冊成功了。

#p#

貼個示例的代碼,次線程不斷更改一個PEOPLE{boy,girl}的信息傳給GUI主線程,主線程在GUI界面上顯示。

  1. mythread.h  
  2.  
  3. view plaincopy to clipboardprint?  
  4. #ifndef MYTHREAD_H     
  5. #define MYTHREAD_H     
  6. #include <QThread>     
  7. enum PEOPLE{boy,girl};     
  8. class MyThread : public QThread     
  9. {     
  10. Q_OBJECT     
  11.     
  12. public:     
  13. MyThread();     
  14. ~MyThread();     
  15. protected:     
  16. void run();     
  17. signals:     
  18. void changeText(PEOPLE pe);     
  19. };     
  20. #endif // MYTHREAD_H    
  21. #ifndef MYTHREAD_H  
  22. #define MYTHREAD_H  
  23. #include <QThread> 
  24. enum PEOPLE{boy,girl};  
  25. class MyThread : public QThread  
  26. {  
  27. Q_OBJECT  
  28. public:  
  29. MyThread();  
  30. ~MyThread();  
  31. protected:  
  32. void run();  
  33. signals:  
  34. void changeText(PEOPLE pe);  
  35. };  
  36. #endif // MYTHREAD_H   
  37.  
  38. mainwindow.h  
  39. view plaincopy to clipboardprint?  
  40. #ifndef MAINWINDOW_H     
  41. #define MAINWINDOW_H     
  42. #include "mythread.h"     
  43. #include <QMainWindow>     
  44. namespace Ui {     
  45.     class MainWindow;     
  46. }     
  47.     
  48. class MainWindow : public QMainWindow {     
  49.     Q_OBJECT     
  50. public:     
  51.     MainWindow(QWidget *parent = 0);     
  52.     ~MainWindow();     
  53. private slots:     
  54. void labelSetText(PEOPLE qstr);     
  55. protected:     
  56.     void changeEvent(QEvent *e);     
  57. private:     
  58.     Ui::MainWindow *ui;     
  59. };     
  60. #endif // MAINWINDOW_H    
  61. #ifndef MAINWINDOW_H  
  62. #define MAINWINDOW_H  
  63. #include "mythread.h"  
  64. #include <QMainWindow> 
  65. namespace Ui {  
  66.     class MainWindow;  
  67. }  
  68. class MainWindow : public QMainWindow {  
  69.     Q_OBJECT  
  70. public:  
  71.     MainWindow(QWidget *parent = 0);  
  72.     ~MainWindow();  
  73. private slots:  
  74. void labelSetText(PEOPLE qstr);  
  75. protected:  
  76.     void changeEvent(QEvent *e);  
  77. private:  
  78.     Ui::MainWindow *ui;  
  79. };  
  80. #endif // MAINWINDOW_H   
  81.  
  82. mythread.cpp  
  83. view plaincopy to clipboardprint?  
  84. #include "mythread.h"     
  85. MyThread::MyThread()     
  86. : QThread()     
  87. {     
  88. }     
  89. MyThread::~MyThread()     
  90. {     
  91. }     
  92. void MyThread::run(){     
  93.  static int i=1;     
  94.  while(true)     
  95.  {     
  96.   if(i==1)emit changeText(boy);     
  97.   else emit changeText(girl);     
  98.   ii=i*(-1);     
  99.  QThread::sleep(1);     
  100.  }     
  101. }    
  102. #include "mythread.h"  
  103. MyThread::MyThread()  
  104. : QThread()  
  105. {  
  106. }  
  107. MyThread::~MyThread()  
  108. {  
  109. }  
  110. void MyThread::run(){  
  111.  static int i=1;  
  112.  while(true)  
  113.  {  
  114.   if(i==1)emit changeText(boy);  
  115.   else emit changeText(girl);  
  116.   ii=i*(-1);  
  117.  QThread::sleep(1);  
  118.  }  
  119. }  
  120.  
  121. mainwindow.cpp  
  122. view plaincopy to clipboardprint?  
  123. #include "mainwindow.h"     
  124. #include "ui_mainwindow.h"     
  125. #include "mythread.h"     
  126. MainWindow::MainWindow(QWidget *parent) :     
  127.     QMainWindow(parent),     
  128.     ui(new Ui::MainWindow)     
  129. {     
  130.     ui->setupUi(this);     
  131.     MyThread *mythread = new MyThread;     
  132.     int id=qRegisterMetaType<PEOPLE>("PEOPLE");     
  133.     connect(mythread,SIGNAL(changeText(PEOPLE)),this,SLOT(labelSetText(PEOPLE)),Qt::QueuedConnection);     
  134.     mythread->start();     
  135.     
  136. }     
  137. MainWindow::~MainWindow()     
  138. {     
  139.     delete ui;     
  140. }     
  141. void MainWindow::changeEvent(QEvent *e)     
  142. {     
  143.     QMainWindow::changeEvent(e);     
  144.     switch (e->type()) {     
  145.     case QEvent::LanguageChange:     
  146.         ui->retranslateUi(this);     
  147.         break;     
  148.     default:     
  149.         break;     
  150.     }     
  151. }     
  152. void MainWindow::labelSetText(PEOPLE qstr){     
  153. switch(qstr)     
  154. {     
  155. case boy:     
  156.     ui->label->setText("BOY");break;     
  157. case girl:     
  158.     ui->label->setText("GIRL");break;     
  159. }     
  160. }  

小結:實現QT元類型QT線程通信的內容到這就介紹完了,希望本文能幫你解決問題。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-22 14:04:33

Qt 元類型 注冊

2011-06-13 17:46:07

Qt 串口通信

2011-06-23 13:38:27

QT 元對象 信號

2011-06-22 10:12:08

Qt 線程

2011-06-27 11:08:37

Qt 串口 通信

2011-06-30 09:46:01

QT 顯示視頻 linux

2011-06-14 09:46:11

Qt QThread 線程

2011-06-20 13:43:08

Qt Socket 線程

2011-06-22 17:09:50

QT 進程 通信

2011-06-22 15:50:45

QT 線程

2011-06-22 15:09:34

Qt 線程 sleep

2011-06-13 10:44:44

Qt Flash

2011-06-22 16:18:23

QT 多線程 QSocket

2011-06-22 16:50:09

Qt 進程 通信機制

2011-06-22 17:27:19

QT 進程通信

2011-06-13 10:03:19

Qt 多線程 編程

2011-06-22 15:24:50

Qt 線程

2011-07-01 13:03:32

QT 線程 串口

2011-06-22 15:42:18

QT 信號

2011-06-30 18:15:36

Qt 線程 同步
點贊
收藏

51CTO技術棧公眾號

日韩精品成人av| 美国黄色特级片| av在线导航| 国产美女一区二区| 美女久久久久久久久久久| 亚洲综合色在线观看| 视频免费一区| 国产一区福利在线| 欧美丰满片xxx777| 久久久久成人精品无码中文字幕| 黄色漫画在线免费看| 久久久影视传媒| 国产精品免费观看在线| 特黄一区二区三区| 精品中文在线| 亚洲电影在线播放| 亚洲国产精品一区二区第一页| 国产精品毛片一区二区在线看舒淇 | japanese国产精品| 日韩欧美激情一区| 妞干网在线免费视频| a√资源在线| 国产精品白丝jk白祙喷水网站| 性色av一区二区三区在线观看| 国产精品视频999| 日本视频久久久| 日韩网站在线播放| 成人国产激情| 依依成人精品视频| 欧美综合激情| av中文字幕播放| 亚洲另类视频| 久久精品国产视频| 国产精品无码一区二区三| av激情成人网| 亚洲1区2区3区4区| 亚洲国产一区二区精品视频 | 国产剧情av在线播放| 国产欧美日韩麻豆91| 97超级碰碰| 精品人妻一区二区色欲产成人| 欧美第十八页| 日韩成人av在线| 免费激情视频在线观看| 影音先锋男人在线资源| 国产日韩欧美激情| 国产亚洲欧美一区二区| 一本到在线视频| 久久黄色网页| 奇米四色中文综合久久| 欧美日韩大片在线观看| 日韩www.| 国产丝袜一区二区三区免费视频| 一级黄色大片儿| 欧洲精品一区二区三区| 精品久久久一区| 亚洲五码在线观看视频| 3p在线观看| 成人性生交大片免费看中文| 成人性生交大片免费看视频直播| 制服丝袜综合网| japanese中文字幕| 亚洲日本一区二区三区在线| 欧美日韩黄色影视| 国产一线二线三线在线观看| 欧亚在线中文字幕免费| 亚洲二区在线观看| 亚洲永久激情精品| 高清毛片在线看| 99免费精品在线观看| 99电影网电视剧在线观看| 一级片aaaa| 日韩成人dvd| 国产91在线播放| 日本少妇全体裸体洗澡| 激情欧美一区| 欧美激情亚洲一区| 麻豆chinese极品少妇| 亚洲精品国产偷自在线观看| 久久精品一偷一偷国产| 大吊一区二区三区| 色婷婷精品视频| 国产视频久久网| 久久亚洲AV成人无码国产野外| 精品五月天堂| 亚洲国产欧美日韩精品| 国产精品无码一区二区三| 日韩日韩日韩日韩日韩| 日本亚洲一区| 久久蜜臀中文字幕| 欧美亚洲免费高清在线观看| 日韩午夜影院| 国产99一区视频免费| 99re视频在线观看| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 欧美一级视频在线| 精品视频在线观看网站| 日韩免费在线观看| 亚洲精品久久一区二区三区777| 99亚洲乱人伦aⅴ精品| 精品福利视频一区二区三区| 中文字幕在线观看网址| 国产一区二区三区天码| 亚洲人精品午夜在线观看| 美女100%露胸无遮挡| 91精品天堂福利在线观看| 欧美日韩aaaa| 青青操免费在线视频| 视频在线在亚洲| 国产欧美日韩专区发布| 国产不卡精品视频| a亚洲天堂av| 欧美一区二区三区在线免费观看 | 色av吧综合网| 婷婷在线精品视频| 一本久道久久综合狠狠爱| 国产成人自拍视频在线观看| 国产精品女同一区二区| 激情五月婷婷综合| 精品日本一区二区三区在线观看| 超碰国产在线| 夜夜精品浪潮av一区二区三区| 妞干网在线视频观看| 国产经典一区| 精品国产一区二区三区久久久蜜月 | 三年中国中文在线观看免费播放| 国产美女一区视频| 欧美午夜精品一区二区蜜桃| 黑人无套内谢中国美女| 久久不见久久见国语| 免费91麻豆精品国产自产在线观看| 日韩三级视频在线| 久久精品国产精品青草| 国产亚洲欧美一区二区| 黄页视频在线播放| 欧美小视频在线| 在线免费看v片| 综合国产视频| 久久久人成影片一区二区三区观看| 无码人妻丰满熟妇区bbbbxxxx| 国产麻豆9l精品三级站| 加勒比在线一区二区三区观看| 色三级在线观看| 欧美日韩在线免费| 久久aaaa片一区二区| gogogo高清在线观看一区二区| 欧美激情三级免费| 国产乱人乱偷精品视频| 久久久综合九色合综国产精品| 亚洲乱码日产精品bd在线观看| 在线日韩影院| 欧美性xxxxx极品少妇| 黄色小视频免费网站| 嫩草国产精品入口| 久久久久久穴| 欧美韩日一区二区| 中文字幕无码乱码人妻日韩精品| 99麻豆久久久国产精品免费优播| 影音先锋男人的网站| 99久久婷婷国产综合精品首页| 日韩av影片在线观看| 久久久久无码精品国产| 国内成人免费视频| 亚洲一区二区三区乱码| 78精品国产综合久久香蕉| 亚洲精品久久久久中文字幕欢迎你| 精品无码人妻一区二区三区品| 国产乱妇无码大片在线观看| 亚洲午夜精品久久| 久久亚洲资源中文字| 国产亚洲欧洲高清一区| 夜夜爽妓女8888视频免费观看| 懂色一区二区三区免费观看| 777av视频| 久久97久久97精品免视看秋霞| 久久久久久久久久久免费| 亚洲国产一二三区| 亚洲午夜久久久久久久久电影院 | 欧美13一14另类| 欧美a级在线观看| 精品久久久久99| 人人澡人人澡人人看| 国产在线精品国自产拍免费| 国产又粗又猛又爽又黄的网站| 天堂精品久久久久| 久久免费国产精品1| 午夜视频免费在线| 色综合天天综合网天天看片| xxxxx在线观看| 狠狠色丁香婷综合久久| 欧美 日韩 国产精品| 中文字幕一区二区三区日韩精品| 免费99精品国产自在在线| 亚洲高清在线观看视频| 精品久久久久久久久中文字幕 | 亚洲美女在线国产| 丰满人妻一区二区三区免费视频棣| 亚洲乱亚洲高清| 欧美一区2区三区4区公司二百| www.26天天久久天堂| 最近2019年日本中文免费字幕| 亚洲永久精品视频| 亚洲一区在线观看免费观看电影高清 | 一二三四在线观看视频| 福利电影一区二区三区| 欧美性高清videossexo| 91高清国产视频| 中文一区一区三区免费在线观看| 国产成人一区二区三区免费看| 日本а中文在线天堂| 日韩在线视频导航| 人妻少妇精品无码专区| 在线观看日韩精品| 久久国产精品二区| 国产精品久久网站| 88av在线播放| 久久国产精品露脸对白| 青青草成人免费在线视频| 欧美亚洲激情| 147欧美人体大胆444| 呦呦在线视频| 在线观看欧美日韩国产| 蜜桃久久一区二区三区| 欧美日韩激情一区二区三区| 久久视频免费在线观看| 亚洲女性喷水在线观看一区| 亚洲精品在线视频免费观看| 久久电影网电视剧免费观看| 亚洲熟妇无码另类久久久| 99精品美女| 欧美日韩电影一区二区| 视频精品一区二区三区| 国产精品视频自拍| 日韩av影片| 久操成人在线视频| 成a人v在线播放| 日韩av网站导航| 国产黄a三级三级三级| 欧美综合视频在线观看| 中文字幕一区二区三区手机版| 韩国视频一区二区| 国产日本在线播放| 亚洲成人av| 亚洲午夜精品福利| 欧美限制电影| 精品乱码一区二区三区| 91综合久久爱com| 91久久中文字幕| 欧美123区| 日韩av黄色在线观看| 国产社区精品视频| 欧美激情亚洲自拍| 色呦呦呦在线观看| 裸体女人亚洲精品一区| aaa日本高清在线播放免费观看| 亚洲第一偷拍网| 亚洲第一视频在线| 欧美成人精精品一区二区频| 97人妻精品一区二区三区| 欧美日韩在线观看一区二区| 欧美日韩综合一区二区三区| 国产在线精彩视频| 欧美精品久久久久久久多人混战| 影音先锋亚洲天堂| 亚洲激情图片qvod| 永久久久久久久| 成人欧美一区二区三区小说| 性爱在线免费视频| 《视频一区视频二区| 91 在线视频| 亚洲精品视频在线观看网站| 多男操一女视频| 中文字幕亚洲电影| 国产男女猛烈无遮挡在线喷水| 国产精品全国免费观看高清| 99久久99久久精品免费看小说.| 国产日本欧洲亚洲| 欧美福利在线视频| 亚洲视频香蕉人妖| 九九久久免费视频| 五月天精品一区二区三区| 欧美日韩在线观看免费| 一区二区三区中文在线| 国产91av视频| 日韩欧美aaa| 中文字幕91爱爱| 欧美丰满嫩嫩电影| 亚洲xxx在线| 精品亚洲一区二区三区在线播放 | 欧美日韩国产黄色| 国产精品国产三级国产专播品爱网| 啪啪一区二区三区| 一区二区三区在线不卡| 日韩精品一区二区三区国语自制| 欧美性极品少妇精品网站| 小泽玛利亚一区二区三区视频| 日韩欧美福利视频| 自拍偷拍欧美亚洲| 欧美性色综合网| 99国产精品久久久久99打野战| 亚洲а∨天堂久久精品喷水| 蜜桃视频在线观看网站| 色系列之999| 丰满诱人av在线播放| 日韩av手机在线看| 懂色av色香蕉一区二区蜜桃| 国产精品一区二区免费看| 狠狠综合久久av一区二区蜜桃| 国产精品美女在线播放| 亚洲国产精品第一区二区| 国产成人在线免费看| 欧美aaaaaa午夜精品| 精品人妻二区中文字幕| 久久久国际精品| 中文字幕影音先锋| 91久久精品午夜一区二区| av免费观看在线| 亚洲欧美国产高清va在线播| 成人免费高清在线播放| 欧美激情第一页xxx| 国产成人精品123区免费视频| 亚洲xxxxx性| 国产欧美日韩影院| 亚洲中文字幕无码一区二区三区| 翔田千里一区二区| 欧美熟妇另类久久久久久多毛 | 99久久久无码国产精品衣服| 亚洲美女在线一区| 国产主播第一页| 精品国产三级a在线观看| 一级日本在线| 欧美亚洲激情在线| 99久久香蕉| 在线免费观看成人| 奶水喷射视频一区| 夜夜爽久久精品91| 国产精品乱人伦一区二区| 在线观看中文字幕视频| 日韩无一区二区| 在线播放麻豆| 日韩av电影在线免费播放| 国产精品久久久网站| 亚洲午夜精品一区二区| 国产视频一区三区| 香蕉视频xxx| 中文字幕一区二区三区蜜月 | 久久艹在线视频| 欧美日韩在线精品一区二区三区激情综合 | 成人免费电影网址| 国产精品沙发午睡系列| 丰满白嫩尤物一区二区| 亚洲av无码一区二区三区在线| 欧美午夜精品久久久久久孕妇 | 18aaaa精品欧美大片h| 亚洲已满18点击进入在线看片| 残酷重口调教一区二区| 日日摸天天爽天天爽视频| 91丨porny丨户外露出| 国产精品成人aaaa在线| 欧美mv日韩mv国产网站app| 成年视频在线观看| 91色p视频在线| 日韩电影一区| 波多野结衣家庭教师视频| 国产ts人妖一区二区| 欧美黑人精品一区二区不卡| 777奇米四色成人影色区| 在线视频三区| 国产欧美日韩中文字幕在线| 青青草97国产精品麻豆| 午夜在线观看av| 国产精品女主播av| 国产又大又黄的视频| 久久精品福利视频| 午夜电影一区| 无码中文字幕色专区| 久久亚洲欧美国产精品乐播| 伊人网中文字幕| 欧美成人午夜激情视频| 国产精品极品| 一级特黄性色生活片| 亚洲人一二三区| 手机在线精品视频| 国产精品一久久香蕉国产线看观看| 一区二区不卡| 久久无码人妻精品一区二区三区| 在线亚洲一区观看| 在线电影福利片| 欧美系列一区| 国产一区啦啦啦在线观看| 天堂中文在线网| 日韩色av导航| 欧美激情影院| 99九九精品视频| 天天色综合成人网| 欧美性天天影视| 免费久久久一本精品久久区| 精品一区精品二区高清| 可以在线观看av的网站| 俺去亚洲欧洲欧美日韩|