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


谢谢!

最佳答案

通常,您不希望存储由QWidgets触发的QEvent。

如果您想延迟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)

09-11 18:44