偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

QT中實(shí)現(xiàn)Thread與GUI主線程連通方法

移動(dòng)開發(fā)
本文以QString為例,注冊時(shí)首先Q_DECLARE_METATYPE(QString);然后,int id=qRegisterMetaType<QString>("QString");加上這兩句就注冊成功了。先來看內(nèi)容。

本文介紹的是QT中實(shí)現(xiàn)Thread與GUI主線程通,目前只會(huì)一種,采用信號槽機(jī)制。

通常情況下,信號機(jī)制可以同步操作,這就意味著在發(fā)射信號的時(shí)候,使用直接函數(shù)即可以立刻調(diào)用連接到一個(gè)信號上的多個(gè)。然而,當(dāng)連接位于不同線程中的對象時(shí),這一機(jī)制就會(huì)變得不同步起來,可以通過修改QObject::connect()的第5個(gè)可選參數(shù)而改變。

connect的第五個(gè)參數(shù)Qt::QueuedConnection表示函數(shù)由接受信號的線程所執(zhí)行,如果不加表示函數(shù)由發(fā)出信號的次線程執(zhí)行。當(dāng)傳遞信號的參數(shù)類型不是QT的元類型時(shí)要先注冊,關(guān)于QT的元類型可以參看QT文檔

QMetaType這個(gè)類里面列舉了所有的元類型。

以QString為例,注冊時(shí)首先Q_DECLARE_METATYPE(QString);然后,int id=qRegisterMetaType<QString>("QString");加上這兩句就注冊成功了。

貼個(gè)示例的代碼,次線程不斷更改一個(gè)QString傳給GUI主線程,主線程在GUI界面上顯示。

  1. mythread.h  
  2. #ifndef MYTHREAD_H  
  3. #define MYTHREAD_H  
  4. #include <QThread> 
  5. class MyThread : public QThread  
  6. {  
  7. Q_OBJECT  
  8. public:  
  9. MyThread();  
  10. ~MyThread();  
  11. protected:  
  12. void run();  
  13. signals:  
  14. void changeText(QString str);  
  15. };  
  16. #endif // MYTHREAD_H  
  17. widgett.h  
  18. #ifndef WIDGETT_H  
  19. #define WIDGETT_H  
  20. #include <QtGui/QMainWindow> 
  21. #include "ui_widgett.h"  
  22. class WidgetT : public QMainWindow  
  23. {  
  24. Q_OBJECT  
  25. public:  
  26. WidgetT(QWidget *parent = 0, Qt::WFlags flags = 0);  
  27. ~WidgetT();  
  28. private:  
  29. Ui::WidgetTClass ui;  
  30. private slots:  
  31. void labelSetText(QString qstr);  
  32. };  
  33. #endif // WIDGETT_H  
  34. mythread.cpp  
  35. #include "mythread.h"  
  36. MyThread::MyThread()  
  37. : QThread()  
  38. {  
  39. }  
  40. MyThread::~MyThread()  
  41. {  
  42. }  
  43. void MyThread::run(){  
  44. static int i=0;  
  45. while(true)  
  46. {  
  47. ++i;  
  48. QString strnum = QString::number(i);  
  49. emit changeText(strnum);  
  50.  
  51. QThread::sleep(1);  
  52. }  
  53. }  
  54. widgett.cpp  
  55. #include "widgett.h"  
  56. #include "mythread.h"  
  57. Q_DECLARE_METATYPE(QString);  
  58. WidgetT::WidgetT(QWidget *parent, Qt::WFlags flags)  
  59. : QMainWindow(parent, flags)  
  60. {  
  61. ui.setupUi(this);  
  62. MyThread *mythread = new MyThread;  
  63. int id=qRegisterMetaType<QString>("");  
  64. connect(mythread,SIGNAL(changeText(QString)),this,SLOT(labelSetText(QString)),Qt::QueuedConnection);  
  65. mythread->start();  
  66. }  
  67. WidgetT::~WidgetT()  
  68. {  
  69. }  
  70. void WidgetT::labelSetText(QString qstr){  
  71. ui.label->setText(qstr);  

小結(jié):QT中實(shí)現(xiàn)Thread與GUI主線程連通方法的內(nèi)容介紹完了,在壇子里逛了一圈,解決線程的問題還真不少,***還是希望本文對你有幫助。

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-07-14 15:34:22

Swing中的線程GUI程序

2011-06-14 09:46:11

Qt QThread 線程

2012-05-14 17:09:05

iOS

2011-06-20 13:43:08

Qt Socket 線程

2011-06-30 17:51:17

QT 元類型 線程

2017-03-23 18:02:59

Android線程Tread

2011-06-14 14:57:06

QT Python GUI

2010-03-01 13:28:44

Python子線程

2011-06-13 10:03:19

Qt 多線程 編程

2009-06-29 17:54:10

Java多線程Thread類創(chuàng)建線程

2011-06-22 16:02:37

Qt 多線程 重入

2011-06-13 10:21:25

QT 信號 槽機(jī)制

2011-06-30 15:25:05

QT QPF TTF

2011-06-30 17:31:32

Qt 多線程 信號

2011-06-13 09:04:39

QT Flash 交互

2017-03-13 10:41:33

iOSUI操作主線程

2011-07-01 14:34:02

Thread Affinity 信號

2010-02-24 11:19:00

Python主線程

2025-04-28 08:20:40

ndroid主線程線程

2011-06-13 17:46:07

Qt 串口通信
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號