GUI(主)线程与子线程之间的通信
来源:互联网 发布:软件sis系统是什么意思 编辑:程序博客网 时间:2024/05/21 13:58
转自:http://blog.csdn.net/small_qch/article/details/6681907
在主线程上,可以控制子线程启动,停止,清零
如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。
程序截图:
上代码:
- #include <QtGui>
- #include <QtCore>
- #include <windows.h>
- 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);
- };
- Thread::Thread(QObject *parent)
- {
- number = 0;
- }
- Thread::~Thread()
- {
- }
- void Thread::run()
- {
- while(1)
- {
- //开启一个死循环,让number每秒自增1,并通过发送UpdateSignal信号通知主界面更新
- 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 "main.moc"
- int main(int argc, char **argv)
- {
- QApplication app(argc, argv);
- Widget *widget = new Widget;
- widget->show();
- return app.exec();
- }
0 0
- GUI(主)线程与子线程之间的通信
- GUI(主)线程与子线程之间的通信
- GUI(主)线程与子线程之间的通信
- QT小例子GUI(主)线程与子线程之间的通信
- QT小例子GUI(主)线程与子线程之间的通信
- QT小例子GUI(主)线程与子线程之间的通信
- QT GUI(主)线程与子线程之间的通信——使用跨线程的信号槽
- Android主线程与子线程之间的通信
- handler 主线程与子线程之间的通信
- Android主线程与子线程之间的通信
- 子线程与主线程之间的通信
- c#子线程与主线程之间的通信
- 子线程和子线程之间的通信
- 安卓 子线程之间的通信
- 进程之间与线程之间的通信
- Android 多线程之间的通信交互(Ui线程与子线程之间的通信)Handler,Handler.post(Runnable runnable),runUiThread方式
- 主线程与子线程之间通讯, 子线程与子线程之间的通讯
- 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面
- 总结一下HBase各种级别的锁以及对读写的阻塞
- Ubuntu 之间通过 VNC 远程访问
- 我的时间管理
- 尊重原创,请保证您的文章为原创作品fgrfgdfg
- linux下c++编译入门小结
- GUI(主)线程与子线程之间的通信
- 运用 ccproxy8.0 进行代理服务器简单部署
- php学习个人小结
- Java一个方法使用可变参数技巧
- 求指数的方法
- JS浮点数运算出现误差解决方案
- 移动互联网时代的全渠道银行
- TinyURL缩短网址服务 - Blog透视镜
- 通过Apache的HttpClient来实现HTTP的GET方法(自定义URI)