GUI(主)线程与子线程之间的通信
在主线程上,可以控制子线程启动,停止,清零
如果子线程启动的话,每一秒钟会向主线程发送一个数字,让主线程更新界面上的数字。
程序截图:
上代码:
#include <QtGui>
#include <QtCore>
#include <>
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;
GUI(主)线程与子线程之间的通信 来自淘豆网m.daumloan.com转载请标明出处.