QT通过线程将数据传递给主函数进行显示
2017-07-19 13:18
357 查看
根据别人的代码,自己重新写一次加深印象。
头文件mainwindow.h
cpp文件main.cpp
cpp文件mainwindow.cpp
头文件mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QThread> #include <QPushButton> #include <QLabel> #include <QVBoxLayout> #include <QHBoxLayout> class Thread : public QThread { Q_OBJECT public: Thread(QObject *parent=0); ~Thread(); private: int number; protected: void run(); signals: void UpdateSignal(int num); public slots: void ResetSlot(); }; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); QLabel *showNum; QPushButton *startButton; QPushButton *stopButton; QPushButton *resetButton; Thread *myThread; int number; signals: void ResetSignal(); public slots: void ClearSlot(); void StartSlot(); void StopSlot(); void UpdateSlot(int num); }; #endif // MAINWINDOW_H
cpp文件main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
cpp文件mainwindow.cpp
#include "mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle(tr("test event")); myThread = new Thread; showNum = new QLabel; startButton = new QPushButton(tr("start")); stopButton = new QPushButton(tr("stop")); resetButton = new QPushButton(tr("reset")); //连接各自信号糟 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())); // myThread->start(); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(showNum); vbox->addWidget(startButton); vbox->addWidget(stopButton); vbox->addWidget(resetButton); QWidget *centerWindow = new QWidget(this); // 用户在mainwindow类中添加自定义的控件和布局 this->setCentralWidget(centerWindow); centerWindow->setLayout(vbox); centerWindow->setMinimumSize( 100, 120 ); } void MainWindow::StartSlot() { myThread->start(); } void MainWindow::StopSlot() { myThread->terminate(); } void MainWindow::UpdateSlot(int num) { showNum->setText(QString::number(num)); } void MainWindow::ClearSlot() { emit ResetSignal(); } MainWindow::~MainWindow() { } 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); }
相关文章推荐
- Qt线程之间通过signal和slot传递数据
- 详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)
- Qt学习:线程间共享数据(使用信号槽传递数据,必须提前使用qRegisterMetaType来注册参数的类型)
- 通过AJAX与Servlet进行交互:通过JSON传递数据
- 通过SharedPreferences类进行应用间数据传递的简单使用场景
- 通过intent和bundle来进行Activity和Fragment的数据传递
- Android开发:客户端与服务器通过传递和接收json数据进行交互
- 转 winfrom如何通过http来进行通信,并且通过传递json格式的数据可接受json格式的数据
- 一起看代码来玩玩QT之18 database(five 用lineEidt 对database 进行高级别的查询,使QTableView显示所需的数据)
- C++中两个线程用同一个list进行数据传递
- C++ Builder 6 进行 SOAP 开发(2) -- 通过 SOAP 传递自定义类型数据
- Android学习【2】Activity之间通过Application进行数据传递
- 初识安卓之利用Handler进行线程间数据传递
- 给ajax留一个模板,通过后台传递json获取数据,并用table显示,方便以后使用
- java多线程之通过Exchanger线程间传递数据
- Silverlight中通过WCF方式传递数据 修改服务器端类的属性Silverlight中无法显示该属性
- Qt窗口间通过信号槽传递数据
- 通过句柄将线程中的数据传递到Activity
- Android——通过Intent,Bundle在activity间进行数据传递
- LigerUI中通过加载服务端数据进行表格的分页显示