所以我有具有2个时隙的工人类:StartWork()和限紧()时,StartWork()一个运行的无限循环(它只是读取和读取照相机输入非停止)和限紧()方法只设置一个布尔变量设置为false(所以内部StartWork()停止循环)。
根据QThread的文档,现在使用它们的最好办法是不是子类,而是由移动人员进入线程,所以这就是我做什么。 问题是,从线程开始()信号被调用,但成品()信号不会被调用。
工人阶级插槽:
无效StartWork(){运行= TRUE; 而(运行){做的工作; }}
空隙限紧(){运行= 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->退出()不会做任何事情,它被调用(因为按钮改变文本),但多数民众赞成它。 如果我只是叫工人─>限紧()它的工作原理,但我就不能再次启动它。
我试着thread->退出(); 但结果是一样的。 此外,我知道子类的作品,但它看起来丑陋,并根据最近的Qt文档,子类化不再是最优的。
提前致谢。