GUI(主)线程与子线程之间的通信
来源:互联网 发布:淘宝付款时间限制 编辑:程序博客网 时间:2024/04/30 20:30
在主线程上,可以控制子线程启动,停止,清零
如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。
程序截图:
上代码:
#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(); }
- 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图形化界面
- C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数
- oracle 自定义类型数据插入
- 学生管理系统信息查询部分主要功能总结
- 第二章 Android内核和驱动程序(转)
- weblogic10 下载
- GUI(主)线程与子线程之间的通信
- C++程序运行时内存布局之----------无继承情况下的虚函数
- Android 实战项目之五子棋 附源码
- Recommond books or blog about testing
- TTL电平与CMOS电平的区别
- js如何判断输入是否为正整数、浮点数等数字的函数
- struts convention-plugin的使用
- Java 中 Vector、ArrayList、List 使用深入剖析
- Android软件开发之ListView 详解 (六)