QT子线程发射信号,UI接收信号刷新UI
来源:互联网 发布:淘宝联盟频道推广 编辑:程序博客网 时间:2024/04/30 19:24
#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();
}
0 0
- QT子线程发射信号,UI接收信号刷新UI
- 子线程 刷新UI
- 关于子线程刷新ui
- Qt子线程的“信号队列”(转载)
- Qt 跨UI线程的数据交换和信号-槽调用实现方案汇总
- QT 发射信号,接收槽,双线程演示(QtSDK演示程序)
- 子线程中无法刷新更新 UI
- android之在子线程刷新UI
- 19 子线程刷新UI runOnUiThread
- 子线程是否可以刷新UI视图?
- qt QComboBox dataChanged()信号的发射
- 让C++发射信号(emit)来触发QT槽以刷新进度条
- 让C++发射信号(emit)来触发QT槽以刷新进度条
- qt ui设计界面 创建信号与槽 原理,
- Qt子线程如何更新UI?
- Qt子线程更新UI的方法
- 【QT】槽无法接收信号
- QT子线程与主线程的信号槽通信
- Unity3D C# MySql 简单的登录验证
- match_parent和fill_parent的区别
- VB6的快捷键
- 多功能电信号测量仪
- 遍历聚合对象中的元素——迭代器模式(三)
- QT子线程发射信号,UI接收信号刷新UI
- 保护自己的软件----android 签字三种方法
- VC和VB数据类型对比
- [Unity 3D] Unity 3D 性能优化 (一)
- 【通知】广州传智播客.Net精品就业班课程调整及学费调整
- HOWTO: Prepare HTML Help Files for Context-Sensitive Help
- JEECG
- 代码优化--惰性载入函数
- 基本几何变换与图形剪裁现实