QT小例子GUI主线程与子线程之间的通信

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

QT小例子GUI(主)线程与子线程之间的通信

在主线程上,可以控制子线程启动,停止,清零

如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。

(但这个程序的实质没有子线程和主线程之间的通信,因为通信的对象(信号与槽)都在主线程里面,要知道QThread本身就是一个对象。)

1.#ifndef TQT_H_

2.#define TQT_H_

3.

4.#include

5.#include

6.

7.class Thread : public QThread

8.{

9.Q_OBJECT

10.private:

11.int number;

12.protected:

13.void run();

14.public:

15.Thread(QObject *parent=0);

16.~Thread();

17.signals:

18.void UpdateSignal(int num);

19.public slots:

20.void ResetSlot();

21.};

22.

24.class Widget : public QWidget

25.{

26.Q_OBJECT

27.private:

28.QLabel *label;

29.QPushButton *startButton;

30.QPushButton *stopButton;

31.QPushButton *resetButton;

32.Thread *myThread;

33.int number;

34.public:

35.Widget(QWidget *parent = 0);

36.~Widget();

37.signals:

38.void ResetSignal();

39.public slots:

40.void ClearSlot();

41.void StartSlot();

42.void StopSlot();

43.void UpdateSlot(int num);

44.};

45.

46.#endif

47.

48.

49.//tqt.cpp

50.#include "tqt.h"

51.#include

52.#include

54.Thread::Thread(QObject *parent)

55.{

56.number = 0;

57.}

58.

59.Thread::~Thread()

60.{

61.

62.}

63.

64.void Thread::run()

65.{

66.while(1)

67.{

68.emit UpdateSignal(number);

69.number++;

70.sleep(1);

71.}

72.}

73.

74.void Thread::ResetSlot()

75.{

76.number = 0;

77.emit UpdateSignal(number);

78.}

79.

80.Widget::Widget(QWidget *parent)

81.{

82.startButton = new QPushButton("start");

83.stopButton = new QPushButton("stop");

84.resetButton = new QPushButton("reset");

bel = new QLabel("empty");

86.myThread = new Thread;

87.QVBoxLayout *layout = new QVBoxLayout;

yout->addWidget(label);

yout->addWidget(startButton);

yout->addWidget(stopButton);

yout->addWidget(resetButton);

92.setLayout(layout);

93.

94.connect(stopButton, SIGNAL(clicked()),

95.this, SLOT(StopSlot()));

96.connect(startButton, SIGNAL(clicked()),

97.this, SLOT(StartSlot()));

98.connect(resetButton, SIGNAL(clicked()),

99.this, SLOT(ClearSlot()));

100.c onnect(myThread, SIGNAL(UpdateSignal(int)), 101.t his, SLOT(UpdateSlot(int)));

102.c onnect(this, SIGNAL(ResetSignal()),

103.m yThread, SLOT(ResetSlot()));

104.

105.

106.s etWindowTitle("Thread Test");

107.r esize(200, 200);

108.m yThread->start();

109.

110.}

111.

112.W idget::~Widget()

相关文档
最新文档