QConcurrent使用报错问题

最近学习了一下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);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值