精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

色综合久久久久久中文网| 欧美视频在线一区二区三区| 99久久无色码| 国产成人无码一区二区在线播放| 久久亚洲影视| 亚洲国产欧美一区二区三区久久| 日韩av播放器| 在线播放免费av| 久久久综合激的五月天| 国产精品自拍偷拍| 国产午夜精品一区二区理论影院| 国产在线日韩精品| 亚洲精品在线观看网站| 久久这里只精品| 国产三级电影在线播放| 亚洲欧美综合色| 久久精品一区二区三区不卡免费视频| 国产剧情精品在线| 久久亚洲精选| 久久久天堂国产精品女人| 波多野结衣家庭教师在线观看 | 成人午夜激情免费视频| 中文字幕亚洲高清| 欧美日韩一视频区二区| 中文字幕日韩在线观看| 人妻精品久久久久中文字幕| 秋霞影院一区| 91精品免费在线| 国产一区亚洲二区三区| 不卡视频观看| 亚洲一区二区影院| 黄瓜视频免费观看在线观看www| 免费a在线观看| caoporen国产精品视频| 亚洲一区二区久久久久久久| 成人小视频在线播放| 欧美亚洲一区二区三区| 97免费视频在线| 妺妺窝人体色www婷婷| 国产精品久久天天影视| 日韩在线欧美在线| 永久免费观看片现看| 精品国产乱码久久久久久蜜坠欲下| 精品国产三级电影在线观看| 免费不卡av网站| 电影一区二区三区久久免费观看| 欧美日韩一二三| 在线观看国产一级片| www.26天天久久天堂| 欧美午夜精品久久久久久孕妇| 青青在线视频观看| 亚洲女色av| 色婷婷综合久色| 中文字幕第36页| 99热播精品免费| 欧美色精品天天在线观看视频| 中文字幕第80页| 懂色aⅴ精品一区二区三区| 欧美性色黄大片手机版| 国产精品区在线| 精品亚洲a∨一区二区三区18| 91精品国产麻豆国产自产在线| 免费看的av网站| 波多野结衣欧美| 日韩精品在线免费播放| 亚洲精品午夜视频| 青青草综合网| 欧美伦理91i| 欧美精品色哟哟| 亚洲国产三级| 国产成人精品午夜| 国产精品爽爽久久久久久| 国产精品一区专区| 国产在线一区二| 男人天堂资源在线| 国产精品久久777777| 国产盗摄视频在线观看| 91九色美女在线视频| 色噜噜夜夜夜综合网| 天堂av8在线| 久本草在线中文字幕亚洲| 亚洲美女av在线播放| 女同久久另类69精品国产| 欧美a级在线| 91sa在线看| 中文字幕一级片| 国产91精品一区二区麻豆亚洲| 久久精品一二三区| 免费网站成人| 午夜成人免费电影| 欧美午夜aaaaaa免费视频| 国产精品国产三级在线观看| 亚洲精品福利在线观看| 91n在线视频| 999亚洲国产精| 国产欧美精品va在线观看| 色综合视频在线| 国产精品卡一卡二| 国产黄色一级网站| 国产 日韩 欧美| 亚洲欧美国产一区二区三区| 麻豆精品一区二区三区视频| 老色鬼久久亚洲一区二区| 2022国产精品| 国产毛片av在线| 亚洲成人综合在线| 婷婷中文字幕在线观看| 国产精品手机在线播放| 久久免费视频网| 国产精品无码白浆高潮| 久久午夜电影网| 精品国产一区二区三区无码| 欧美爱爱视频| 亚洲天堂视频在线观看| 国产精品第56页| 国产一区二区在线免费观看| 日韩久久不卡| 午夜影院在线播放| 欧美精品一区二区三区一线天视频 | 欧美另类videos| 91九色综合| 亚洲女人被黑人巨大进入| 日本熟妇成熟毛茸茸| 国内一区二区视频| 宅男av一区二区三区| free欧美| 国产午夜精品理论片a级探花| 久久久精品视频在线| 韩日精品视频一区| 亚洲欧美日韩国产成人综合一二三区 | 亚洲人辣妹窥探嘘嘘| 丝袜久久网站| 91成人精品网站| 日韩一区免费视频| 亚洲一区二区三区四区不卡| 黄色a级三级三级三级| 欧美日韩一二三四| 国产精品日韩欧美| 国产黄色片在线观看| 91极品美女在线| 精品无人区无码乱码毛片国产| 亚洲欧美清纯在线制服| 久久精品日产第一区二区三区乱码 | 最新国产精品视频| 日韩av免费在线| 国产小视频在线观看| 在线免费精品视频| 亚洲AV无码成人精品区明星换面| 久久久久99| 日韩精品久久一区| 国产91亚洲精品久久久| 中文字幕亚洲综合| 国产精品一区二区人人爽| 亚洲欧美另类综合偷拍| gogo亚洲国模私拍人体| 激情五月***国产精品| 国产伦精品一区二区三| 美女扒开腿让男人桶爽久久软| 精品亚洲一区二区三区在线播放 | 欧美日韩国产片| 成人在线观看高清| 国产精品性做久久久久久| www.夜夜爱| 久久97精品| 国产成人久久精品| 午夜老司机在线观看| 91精品欧美综合在线观看最新| 免费在线观看av网址| 99久久er热在这里只有精品66| 日本成年人网址| 精品视频久久| 亚洲专区国产精品| 岛国av免费在线观看| 亚洲人成网站免费播放| 亚洲自拍偷拍另类| 亚洲一区在线观看视频| 波多野结衣一本| 美女精品一区二区| 人人妻人人做人人爽| 西野翔中文久久精品字幕| 国产欧美韩国高清| sis001亚洲原创区| 伊人久久免费视频| 国产a级免费视频| 欧美日韩在线视频观看| 日日操免费视频| 成人av网站在线| 三级在线免费看| 国产主播精品| 亚州欧美一区三区三区在线| 亚洲精选av| 国产精品igao视频| 新版中文在线官网| 中文字幕成人在线| 后入内射欧美99二区视频| 欧美在线色视频| 亚洲国产精品午夜在线观看| 国产精品久久久久婷婷二区次| 丰满少妇xbxb毛片日本| 久久av中文字幕片| av黄色在线网站| 一区二区影视| 色之综合天天综合色天天棕色| 在线综合色站| 国产欧美日韩免费| 成人av观看| 欧美激情国产精品| 嫩草在线视频| 丰满熟妇人妻中文字幕| 69堂国产成人免费视频| 99久久久无码国产精品免费蜜柚| 亚洲一二三区不卡| 97在线观看视频免费| 国产日韩精品一区二区三区在线| 性猛交╳xxx乱大交| 紧缚奴在线一区二区三区| 久久精品一区二| 亚洲视频www| a级黄色小视频| 欧美aⅴ99久久黑人专区| 一区二区精品在线| 国产精品亚洲片在线播放| 国新精品乱码一区二区三区18| 国产精品99久久免费| 成人国产精品日本在线| 一区在线影院| 国产成一区二区| 超碰国产一区| 日韩av电影在线播放| 欧美一区久久久| 7777精品视频| 日本免费一区二区六区| 国内外成人免费激情在线视频网站 | 一级黄色大片儿| 久久99蜜桃精品| 天天干天天色天天干| 久久国产精品露脸对白| 亚洲一区日韩精品| 美女一区二区三区在线观看| 日本人视频jizz页码69| 日本欧美韩国一区三区| 日本www.色| 免费观看日韩av| 日韩欧美亚洲另类| 国产制服丝袜一区| 无套内谢丰满少妇中文字幕| 国产精品一区一区| 特黄特色免费视频| 成人高清视频在线| 50一60岁老妇女毛片| 91视频国产资源| 亚洲av无码一区二区三区人| 久久精品一二三| 少妇一级黄色片| 国产精品美女久久久久久2018| 成人黄色短视频| 亚洲少妇30p| 国产亚洲欧美久久久久| 精品福利免费观看| 日本视频在线观看免费| 欧美亚一区二区| 国产巨乳在线观看| 亚洲第一精品夜夜躁人人躁| 涩爱av在线播放一区二区| 亚洲色图日韩av| 欧美一区二区三区在线观看免费| 欧美xxxx做受欧美| 黄色在线观看www| 国产成人精品999| 亚洲网站三级| 精品高清视频| 成人羞羞网站入口| 日韩成人午夜影院| 久久高清一区| 99国产精品久久久久久| 不卡的av在线播放| 亚洲国产天堂av| 亚洲乱码一区二区三区在线观看| 日韩黄色精品视频| 欧美日韩成人综合天天影院 | 亚洲毛片在线免费观看| 免费av网站在线观看| 97在线视频观看| 日日夜夜亚洲精品| 精品久久精品久久| 欧美电影免费| 91九色在线观看视频| 久久9热精品视频| 亚洲天堂资源在线| 1区2区3区精品视频| 日本在线小视频| 欧美久久久久久久久中文字幕| 亚洲 国产 欧美 日韩| 精品国产一区二区三区久久狼5月| av日韩中文| 91精品视频播放| 国产永久精品大片wwwapp| 精品少妇人欧美激情在线观看| 日本中文字幕一区| 亚洲精品久久一区二区三区777| 久久精品视频在线看| 欧美亚洲天堂网| 欧美精品日日鲁夜夜添| 嫩草精品影院| 国外视频精品毛片| 精品国产亚洲一区二区三区在线| 日本三级中国三级99人妇网站| 欧美日本国产| 亚洲欧美天堂在线| 久久精品欧美一区二区三区麻豆| 国产真实夫妇交换视频| 56国语精品自产拍在线观看| 国产三级在线| 欧美在线中文字幕| 国产福利一区二区精品秒拍| 黄色污污在线观看| 久久 天天综合| 精品亚洲aⅴ无码一区二区三区| 欧美日韩国产精品专区 | 久久国产精品美女| 亚洲乱码一区二区三区三上悠亚| 欧美专区18| 中文字幕av观看| 亚洲va欧美va人人爽| 性猛交xxxx乱大交孕妇印度| 久久手机精品视频| 91麻豆精品国产综合久久久| 香蕉久久免费影视| 热久久久久久久| av黄色在线免费观看| 欧美性黄网官网| 欧美视频免费一区二区三区| 欧美在线免费观看| 天堂99x99es久久精品免费| 妞干网在线观看视频| 成人免费av资源| 久久久精品视频免费| 亚洲电影av在线| 91九色美女在线视频| 精品蜜桃传媒| 久久都是精品| 少妇精品无码一区二区免费视频| 日韩欧美国产免费播放| 九九在线视频| 国产精品久久不能| 日韩在线中文| 91亚洲一区二区| 亚洲伊人色欲综合网| 人人妻人人澡人人爽人人欧美一区| 欧美激情综合色| 奇米777国产一区国产二区| 各处沟厕大尺度偷拍女厕嘘嘘| 久久夜色精品国产噜噜av| 久久亚洲精品石原莉奈| 在线视频中文亚洲| 亚洲狼人在线| 日本大片免费看| 91在线观看高清| 最近中文字幕在线观看视频| 日韩视频一区在线| 亚洲午夜免费| 男人天堂1024| 国产精品嫩草影院com| 国产成人久久精品77777综合 | fc2成人免费人成在线观看播放| 91美女免费看| 亚洲午夜av久久乱码| 四虎视频在线精品免费网址| 成人区一区二区| xfplay精品久久| 一区二区www| 久久久久久欧美| 国产欧美日韩影院| 欧洲美女亚洲激情| 狠狠躁夜夜躁久久躁别揉| 1024视频在线| 国产欧美日韩伦理| 青青草精品视频| 国产亚洲精品女人久久久久久| 亚洲欧美一区二区激情| 亚洲最大的免费视频网站| 国产一区二区三区小说| 欧美激情一区二区三区全黄| 精品国产免费无码久久久| 欧美在线视频在线播放完整版免费观看 | 亚洲欧美国产精品专区久久 | 欧美不卡一区二区| 日韩av首页| 国产成人一区二区三区别| 久久欧美一区二区| 午夜精品久久久久久久99| 国产成人一区二区三区| 黄色成人在线网址| 国产又粗又硬视频| 亚洲国产成人久久综合一区| 韩日精品一区| 成人免费aaa| 亚洲精品精品亚洲| h网站视频在线观看| 精品综合在线|