使用成员函数
QtConcurrent :: run()也接受指向成员函数的指针。第一个参数必须是一个const引用或一个指向该类实例的指针。const成员函数一般传递 常量引用 (const reference),而非常量成员函数一般传递 指针 (pointer)
例如,在一个单独的线程中调用QByteArray :: split()(一个const成员函数)就像这样完成:
---------------------
版权声明:本文为CSDN博主「luoyayun361」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/luoyayun361/article/details/80288610
#include "widget.h"
#include <QDebug>
#include <QThread>
#include <QtConcurrent>
#include <QFuture>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_pBtn = new QPushButton("Click me",this);
m_pBtn->setGeometry(100,100,220,70);
connect(m_pBtn,&QPushButton::clicked,this,&Widget::onBtnClicked);
}
void Widget::onBtnClicked()
{
#if 1
//调用外部函数
QFuture<void> f1 =QtConcurrent::run(func,QString(index++));
//调用类成员函数
QFuture<void> f2 =QtConcurrent::run(this,&Widget::myFunc,QString("aaa"));
#else //使用Lambda函数实现
QFuture < void > future = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << QThread::currentThreadId() << QThread::currentThread();
});
QFuture < void > future2 = QtConcurrent::run([=](){
qDebug() << __FUNCTION__ << QThread::currentThreadId() << QThread::currentThread();
});
#endif
}
void Widget::myFunc(const QString & str)
{
qDebug() << __FUNCTION__ << str << QThread::currentThreadId() << QThread::currentThread();
}
void func(QString str)
{
qDebug() << __FUNCTION__ << str << QThread::currentThreadId() << QThread::currentThread();
}