QT子线程发射信号,UI接收信号刷新UI
2013-12-16 21:32
197 查看
#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();
}
#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();
}
相关文章推荐
- Arduino Uno 红外遥控 接收 和 发射信号 实验 (下)
- 无线广播相关信号(收音机)的发射与接收
- QT 发射信号,接收槽,双线程演示(QtSDK演示程序)
- 让C++发射信号(emit)来触发QT槽以刷新进度条
- 用stm32F407实现红外信号的发射与接收(1)
- 让C++发射信号(emit)来触发QT槽以刷新进度条
- Arduino Uno 红外遥控 接收 和 发射信号 实验 (上)
- 手机发出微弱信号是如何被接收?
- 使用回调函数实现socket服务器端子线程刷新UI数据(socket通信第三弹)
- Android面试题 你经常写复杂的界面,那Android刷新Ui有什么特点?在这个过程中做哪些操作会出现问题
- 支持在安卓中UI(View)的刷新功能
- EmguCV控件Emgu.CV.UI.ImageBox及C# picturebox显示图片连续刷新出现闪烁问题
- 线程中刷新UI
- 关于无线遥控315模块的发射与接收
- 【Based Android】Android Sensor感应器介绍(二)线程中刷新UI 创建一个android测力计
- setText 没起作用,但getText能得到值,很显然是UI没有刷新过来而已
- Android开发——fragment中数据传递与刷新UI(更改控件)
- Android笔记:invalidate()和postInvalidate() 的区别及使用——刷新ui
- VS无法正常加载Wpf后台刷新ui的自定义控件
- ui-route多级路由刷新当前页