有没有办法在Qt中延迟QEvent的进行?
这段代码只是告诉你我想做什么:
QList<QEvent*> waited_events;
...
bool MyQWidget::event(QEvent * event)
{
if (event->type() == QEvent::KeyPress)
{
waited_events.append(event);
QTimer::singleShot(100, this, SLOT(timer()));
return true;
} else
return QWidget::event(event);
}
...
void MyQWidget::timer()
{
if (!waited_actions.isEmpty())
{
QEvent* event = waited_events.takeFirst();
QWidget::event(event);
}
}
谢谢!
答案 0 :(得分:0)
作为一般规则,您不希望存储由QWidgets触发的QEvent。
如果您想延迟处理QEvent,则您发布的代码段是正确的。但是,您的代码段将无法执行您想要的操作,因为这时:
void MyQWidget::timer()
{
if (!waited_actions.isEmpty())
{
QEvent* event = waited_events.takeFirst();
QWidget::event(event);
}
}
调用您的QEvent已被删除,因此waited_events
将始终为空。
如果您需要MyQWidget
使用此方法,则必须创建一个新事件(如F. Osterfeld建议的那样)。我不是百分百肯定,但看起来你只是想抓住QEvent::KeyPress
。如果是这种情况,那么简单的方法是让MyQWidget
覆盖void QWidget::keyPressEvent(QKeyEvent* event)
。