main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "workthread.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void showValue(int value);// 显示槽函数
private slots:
void on_StartBtn_clicked();// 开始按钮槽函数
void on_StopBtn_clicked(); // 结束按钮槽函数
private:
Ui::MainWindow *ui;
private:
WorkThread * workThread;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->value->setText("0");// label显示文本
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::showValue(int value)
{
//ui->value->setText("ttt");// label显示文本
ui->value->setText(QString::number(value)); //更新label内容
}
void MainWindow::on_StartBtn_clicked()
{
workThread = new WorkThread();
workThread->start();
connect(workThread, SIGNAL(currentValue_signal(int)), this, SLOT(showValue(int)));
ui->StartBtn->setEnabled(false);
ui->StopBtn->setEnabled(true);
}
void MainWindow::on_StopBtn_clicked()
{
workThread->terminate();
workThread->wait();
ui->StartBtn->setEnabled(true);
ui->StopBtn->setEnabled(false);
}
workthread.h
#ifndef WORKTHREAD_H
#define WORKTHREAD_H
#include <QThread>
class WorkThread:public QThread
{
Q_OBJECT
public:
WorkThread();
~WorkThread();
// 重写run()方法
void run();
signals:
void currentValue_signal(int value);// 定义信号发到主线程
};
#endif // WORKTHREAD_H
workthread.cpp
#include "workthread.h"
#include <QDebug>
WorkThread::WorkThread()
{
}
WorkThread::~WorkThread()
{
}
void WorkThread::run()
{
while (1)
{
for (int n = 0; n < 10; n++)
{
emit currentValue_signal(n);
msleep(1000);
}
msleep(1000);
}
}
mainwindow.ui