如何在Qt槽函数中执行耗时操作
在Qt应用程序中,我们通常使用槽函数来处理用户界面上的事件。然而,在一些情况下,槽函数需要执行长时间运行的任务,如文件读写、网络请求等。为了避免阻塞主线程导致界面卡顿,我们需要在槽函数中执行异步任务。
一种解决方案是使用Qt提供的异步机制,如QtConcurrent、QThread等。这里我们介绍另一种简单的方式,即使用C++11的std::async和std::future。
示例代码如下:
#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtCore/QFuture>
#include <QtCore/QFutureWatcher>
#include <iostream>
#include <chrono>
#include <future>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
void longTask();
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow: