我有以下事情:
应用程序启动时,Worker移至另一个线程。单击的按钮的信号连接到线程的插槽,如下所示:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
thread = new QThread(this);
worker = new Worker();
worker->moveToThread(thread);
worker->information = "hello world";
connect(this, &QMainWindow::destroyed, thread, &QThread::terminate);
connect(ui->b_b1, SIGNAL(clicked()), thread, SLOT(start()));
connect(thread, &QThread::started, worker, &Worker::doWork);
connect(worker, &Worker::resultReady, thread, &QThread::quit);
}
Worker::Worker(QObject *parent)
:QObject (parent)
{
information = "default";
}
void Worker::doWork()
{
for (int i = 0; i < 3; i++){
Sleep(1000);
qDebug() << "i= " << i << " " << information;
}
emit resultReady("done");
}
单击按钮时,Worker确实工作了3秒钟。如果工作者完成工作,可以再次单击该按钮以重新启动。但是,如果在Worker仍在工作时单击按钮,则不会发生任何事情。
是否可以将所有按钮单击信号按某种顺序从线程可以弹出并开始工作的队列中发送?
例如:
该按钮已被快速单击4次;
工人开始,并在3秒后完成,
工人开始,并在3秒后完成,
工人开始,并在3秒后完成,
工作人员开始,并在3秒后完成。