我有一个无限循环,在循环内部我想在每次单击按钮时插入一个状态,它将打破当前循环。 我尝试了几种方式:
if(ui->btnStop->isDown())
{
break;
}
if(ui->btnStop->isChecked())
{
break;
}
和
if(cv::waitKey(10)>=0)
{
break;
}
但是,它不起作用。 我想知道为什么cv :: waitKey在Qt中不起作用,但在非Qt项目中它将完美地工作。 有没有其他方法可以用QPushButton打破无限循环? 任何帮助将不胜感激。
答案 0 :(得分:3)
它不起作用,因为事件处理器无法在循环中锁定执行时运行。最简单的解决方案是在每个循环中简单地调用QApplication::processEvents()
,这将强制事件处理器运行。
// Add a boolean to your class, and a slot to set it.
MyClass
{
...
private slots:
void killLoop() { killLoopFlag_ = true; }
private:
bool killLoopFlag_;
}
// In the constructor, connect the button to the slot.
connect( ui->btnStop, SIGNAL( clicked() ),
this, SLOT( killLoop ) );
// Then when performing the loop, force events to be processed and then
// check the flag state.
killLoopFlag_ = false;
while ( true ) {
// ...Do some stuff.
QApplication::processEvents();
if ( killLoopFlag_ ) {
break;
}
}
但是你需要问自己:我应该在GUI线程中进行长时间运行的计算吗?答案通常是否定的。