Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何从按钮运行线程?_Qt - Fatal编程技术网

Qt 如何从按钮运行线程?

Qt 如何从按钮运行线程?,qt,Qt,main.cpp: #include "mainwindow.h" #include "myobject.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); QThread cThread; MyObject cObject; cObject.doSetup(

main.cpp:

#include "mainwindow.h"
#include "myobject.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    QThread cThread;
    MyObject cObject;
    cObject.doSetup(cThread);
    cObject.moveToThread(&cThread);
    // cThread.start();

    return a.exec();
}

我正在尝试在点击按钮()时启动线程。为了做到这一点,我必须通过一个参数将cThread传递给mainwindow,对吗?我只想有人确认一下,确保我做得对。

这似乎是一种方法。另一种方法是将按钮的signal
clicked()
连接到应用程序中线程的插槽
start(Priority)
,这样会更好、更短。

问题是,如果我这样做,那么用户可能能够启动多个线程(我有一个if语句来检查alreadyStarted布尔值)。有什么想法吗?那么你的第一个方法是正确的。无论如何,如果它是二进制状态,你可以用checkbutton来去掉你的支票。checkbutton是指checkbox吗?或者您的意思是在单击时以某种方式禁用按钮?禁用按钮不会减少代码行数。我在想checkbutton。我不知道你说的checkbutton是什么意思,我在文档或谷歌上找不到它。
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    // cThread.start();
}