QT小例子GUI(主)线程与子线程之间的通信
在主线程上,可以控制子线程启动,停止,清零
如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。
- #ifndef TQT_H_
- #define TQT_H_
-
- #include <QtGui>
- #include <QtCore>
-
- class Thread : public QThread
- {
- Q_OBJECT
- private:
- int number;
- protected:
- void run();
- public:
- Thread(QObject *parent=0);
- ~Thread();
- signals:
- void UpdateSignal(int num);
- public slots:
- void ResetSlot();
- };
-
- class Widget : public QWidget
- {
- Q_OBJECT
- private:
- QLabel *label;
- QPushButton *startButton;
- QPushButton *stopButton;
- QPushButton *resetButton;
- Thread *myThread;
- int number;
- public:
- Widget(QWidget *parent = 0);
- ~Widget();
- signals:
- void ResetSignal();
- public slots:
- void ClearSlot();
- void StartSlot();
- void StopSlot();
- void UpdateSlot(int num);
- };
-
- #endif
-
-
-
- #include "tqt.h"
- #include <assert.h>
- #include <windows.h>
-
- Thread::Thread(QObject *parent)
- {
- number = 0;
- }
-
- Thread::~Thread()
- {
-
- }
-
- void Thread::run()
- {
- while(1)
- {
- emit UpdateSignal(number);
- number++;
- sleep(1);
- }
- }
-
- void Thread::ResetSlot()
- {
- number = 0;
- emit UpdateSignal(number);
- }
-
- Widget::Widget(QWidget *parent)
- {
- startButton = new QPushButton("start");
- stopButton = new QPushButton("stop");
- resetButton = new QPushButton("reset");
- label = new QLabel("empty");
- myThread = new Thread;
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(label);
- layout->addWidget(startButton);
- layout->addWidget(stopButton);
- layout->addWidget(resetButton);
- setLayout(layout);
-
- connect(stopButton, SIGNAL(clicked()),
- this, SLOT(StopSlot()));
- connect(startButton, SIGNAL(clicked()),
- this, SLOT(StartSlot()));
- connect(resetButton, SIGNAL(clicked()),
- this, SLOT(ClearSlot()));
- connect(myThread, SIGNAL(UpdateSignal(int)),
- this, SLOT(UpdateSlot(int)));
- connect(this, SIGNAL(ResetSignal()),
- myThread, SLOT(ResetSlot()));
-
-
- setWindowTitle("Thread Test");
- resize(200, 200);
- myThread->start();
-
- }
-
- Widget::~Widget()
- {
-
- }
-
- void Widget::StartSlot()
- {
- myThread->start();
- }
-
- void Widget::StopSlot()
- {
- myThread->terminate();
- }
-
- void Widget::UpdateSlot(int num)
- {
- label->setText(QString::number(num));
- }
-
- void Widget::ClearSlot()
- {
- emit ResetSignal();
- }
-
-
- #include <QtGui>
- #include "tqt.h"
-
- int main(int argc,char **argv)
- {
- QApplication app(argc, argv);
- Widget *widget = new Widget;
- widget->show();
- return app.exec();
- }
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/78650392
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)