运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/93bfa2910ee04529c5a7680bc28ee726.png)
主程序
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
界面程序
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void Function1();
void Function2(const QByteArray &data);
private slots:
void on_pushButtonFunc1_clicked();
void on_pushButtonFunc2_clicked();
private:
Ui::Widget *ui;
bool m_brunning;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QFuture>
#include <QtConcurrent>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
m_brunning = false;
}
void Widget::on_pushButtonFunc1_clicked()
{
ui->textEdit->append("main thread id:");
ui->textEdit->append(QString::number(quintptr(QThread::currentThreadId())));
m_brunning = true;
QFuture<void> future = QtConcurrent::run(this,&Widget::Function1);
}
void Widget::on_pushButtonFunc2_clicked()
{
QByteArray data;
data.append("data test");
QFuture<void> future = QtConcurrent::run(this,&Widget::Function2,data);
}
void Widget::Function1()
{
while(m_brunning)
{
ui->textEdit->append("func1 thread id:");
ui->textEdit->append(QString::number(quintptr(QThread::currentThreadId())));
QThread::sleep(1);
}
}
void Widget::Function2(const QByteArray &data)
{
ui->textEdit->append("func2 data received:");
ui->textEdit->append(QString::fromUtf8(data));
ui->textEdit->append(",Thread id:");
ui->textEdit->append(QString::number(quintptr(QThread::currentThreadId())));
}
工程文件
#-------------------------------------------------
#
# Project created by QtCreator 2023-03-09T10:49:35
#
#-------------------------------------------------
QT += core gui concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = QtThreadConcurrent
TEMPLATE = app
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
CONFIG += c++11
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target