我在我的小部件中重新实现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);
}
有人能帮助我吗? 非常感谢
答案 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();
}