所以我有一个有2个槽的工作类:StartWork()和StopWork(),StartWork()一个运行无限循环(它只是不停地读取和读取相机输入)而StopWork()方法只设置一个bool变量设置为 false(因此 StartWork() 内的循环停止)。
根据 QThread 文档,现在使用它们的最佳方法不是通过子类化,而是通过将工作人员移动到线程中,所以这就是我所做的。问题是,线程的started()信号被调用,但finished()信号永远不会被调用。
工人阶级槽位:
void StartWork(){ 运行 = true; while(running){ 做工作; }}
void StopWork(){ 运行 = false; }
QThread初始化和信号/槽连接:
thread = new QThread();
worker = new Worker();
worker.moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(StartWork()));
QObject::connect(thread, SIGNAL(finished()), worker, SLOT(StopWork()));
在我的 QPushButton 上我这样做:
if(pushStartStop->text().toLower() == "start")
{
pushStartStop->setText("Stop");
thread->start();
}
else
{
pushStartStop->setText("Start");
thread->quit();
}
thread->start() 工作正常,并且 StartWork() 被调用,一切都很漂亮(GUI 运行时没有任何块等)。
但 thread->quit() 不执行任何操作,它被调用(因为按钮更改文本),但仅此而已。如果我只是调用worker->StopWork()它可以工作,但是我无法再次启动它。
我尝试过 thread->exit();但结果是一样的。我也知道子类有效,但它看起来更丑陋,并且根据最近的 Qt 文档,子类不再是最佳的。
提前致谢。