【发布时间】:2012-03-21 18:29:49
【问题描述】:
有什么方法可以延迟 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);
}
}
谢谢!
【问题讨论】:
-
这个有什么问题?
-
您可以使用该方法,但您必须创建一个新事件。你可以使用 QCoreApplication::postEvent/sendEvent 来处理它。
-
@LucaCarlon 这行不通,因为当
timer()函数即将被调用时,他保存的 QEvent* 对象将被销毁。 -
好吧,我可以创建与我已经收到的完全相同的新活动吗?
-
不,不幸的是
QEvent没有实现虚拟复制构造函数成语parashift.com/c++-faq-lite/virtual-functions.html#faq-20.8。无法克隆任意 QEvent,但您可以编写一个函数来克隆您可能感兴趣的事件。