3

有什么方法可以延迟 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);
    }
}

谢谢!

4

1 回答 1

0

作为一般规则,您不想存储由 QWidgets 触发的 QEvents。

如果您想延迟 QEvent 的处理,您发布的代码片段是正确的。但是,您的代码片段不会做您想做的事情,因为当这样:

void MyQWidget::timer()
{
    if (!waited_actions.isEmpty())
    {
        QEvent* event = waited_events.takeFirst();
        QWidget::event(event);
    }
}

被称为您的 QEvent 已被删除,因此waited_events将始终为空。

如果您需要MyQWidget使用这种方法,则必须创建一个新事件(如 F. Osterfeld 建议的那样)。我不是 100% 确定,但看起来你只是想抓住一个QEvent::KeyPress. 如果是这种情况,那么简单的方法是MyQWidget覆盖void QWidget::keyPressEvent(QKeyEvent* event).

于 2012-03-23T20:40:25.650 回答