最近学习了一下qt的并发编程,需要使用到QtConcurrent类和QFuture类,但是在写代码的时候源文件居然报错了?!王德发?下面是写法和原因:
MainWidget.h
#pragma once
#include <QtWidgets/QWidget>
#include <QThread>
#include <QDebug>
#include <QtConcurrent>
#include <QFuture>
#include "ui_MainWidget.h"
class MainWidget : public QWidget
{
Q_OBJECT
public:
MainWidget(QWidget *parent = nullptr);
~MainWidget();
void timeTask();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWidgetClass ui;
};
MainWidget.cpp
#include "MainWidget.h"
MainWidget::MainWidget(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
MainWidget::~MainWidget()
{}
void MainWidget::timeTask()
{
int num = 0;
for (int i = 0; i < 1000000; ++i)
{
num++;
qDebug() << "num = " << num;
}
}
void MainWidget::on_pushButton_clicked()
{
//timeTask();
QtConcurrent::run(this, &MainWidget::timeTask);
// QFuture<void> future = QtConcurrent::run(this, &MainWidget::timeTask);
}
运行的时候出现如下错误:

constexpr QRunnable() noexcept = default报错,后来到处查了一下,
原因是QT6修改了这种老式写法。官方文档如下:
使用成员函数:
QtConcurrent::run()还接受指向成员函数的指针。第一个参数必须是const引用或指向类实例的指针。在调用const成员函数时,传递const引用是有用的;传递指针对于调用修改实例的非const成员函数很有用
所以正确的写法是
QtConcurrent::run(&MainWidget::timeTask, this);
// QFuture<void> future = QtConcurrent::run(&MainWidget::timeTask, this);
8030

被折叠的 条评论
为什么被折叠?



