【发布时间】:2021-05-13 05:29:32
【问题描述】:
我想使用不同的线程或QProcess 或其他更有效且性能更好的方法运行几个函数。我正在尝试为校准器构建一个 gui,一旦按下校准按钮,它就需要校准。为了校准,我有一些功能可以做到这一点。但是,执行此校准过程需要一些时间。在我完成校准之前,我的 gui 一直没有响应。所以我在这里要做的是我想在一些并行进程或线程或其他一些东西中运行该函数。
#include "widget.h"
#include "ui_widget.h"
#include <iostream>
#include <sstream>
#include <QtConcurrent/QtConcurrent>
#include <QFuture>
using namespace Eigen;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->lineEdit->setReadOnly(true);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_pressed()
{
ui->plainTextEdit->appendHtml("<div style='color: green;'> Calibrating ..... </div>");
QString body = ui->comboBox->currentText();
int body = body.toInt();
/*
I want to run calib function here in separate thread or QtConcurrent so my gui will stay resposive even my function takes some time close to 1 min to do calibration
*/
}
void Widget::printReceivedBody(int x)
{
}
void Widget::Calib(int x)
{
printReceivedBody(int x)
}
我检查了堆栈和 qt 中的一些问题,但无法解决我的问题。我发现了一些问题,但正在尝试运行可执行文件。我也可以通过可执行文件来做,但我想尝试上述方法而不是使用可执行文件。
我去了 qt Documentaion,但该文档让我更加困惑 :-(
有人可以建议我怎么做吗?
【问题讨论】:
-
您不想运行可执行文件,但想知道是否应该使用 QProcess?这就是 QProcess 所做的一切。因此,如果您不想运行可执行文件,则可以排除 QProcess。查找QThread 的示例。它们数量众多。
-
或QtConcurrent::run 是另一种选择。
-
几天前我回答了一个类似的question。
标签: c++ qt qthread qprocess qtconcurrent