有没有办法暂时禁用keyPressEvent?

时间:2014-04-17 07:07:09

标签: qt events

我在我的小部件中重新实现keyPressEvent功能。

我想在keyPressEvent函数中执行某些工作时禁用按键,如下所示:

void TrackingForm::keyPressEvent(QKeyEvent *event)
{
   // disable get keyPress
   doWork();
   // enable 
}

另一种方式是发布事件的清除缓冲区(排队事件)。我在QApplication::removePostedEvents函数中使用keyPressEvent但它不起作用:

void TrackingForm::keyPressEvent(QKeyEvent *event)
{
   doWork(); // this function takes about 3 seconds
   QApplication::removePostedEvents(this);
}

有人能帮助我吗? 非常感谢

1 个答案:

答案 0 :(得分:2)

您可以尝试在单独的线程中执行doWork() - 然后您可以在keyPressEvent()正在运行时忽略doWork()中的事件...

例如你可以试试这个:

void TrackingForm::keyPressEvent(QKeyEvent *event)
{
    if (!workInProgress) //workInProgress is a bool member
        QtConcurrent::run(doWork);
        //doWork() sets workInProgress to true before work,
        //and to false after work is done
    else
        event->ignore();
}