QT:计时器在 changeEvent 中不起作用,但它在 timerEvent 中起作用

QT: timer is not working in changeEvent but it works in timerEvent

我有这个功能是qtdlg.cpp的一部分。 这是 class:

的构造函数
qtdlg::qtdlg()
{
    timer1.start(100, this); // 100 msec updating
}

void qtdlg::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui.retranslateUi(this);
        break;
    case QEvent::Timer:
        {
            // do some stuff // it never comes here! 
        }
        break;
    default:
        break;
   }
}

我知道如果我使用它会有效:

void TempCompStart::timerEvent(QTimerEvent *event)
{
}

我的问题是,为什么它在第一种情况下对 changeEvent 不起作用,但它对 timerEvent 起作用?不支持这样工作吗!

changeEvent 处理状态变化。例如,当 window 状态更改、标题更改或区域设置更改时调用。所以它不会像 timerEvent.

那样被定期调用

如果你想像那样处理定时器事件,你应该像这样重新实现 eventFilter :

bool qtdlg::eventFilter(QObject  *obj, QEvent * event)
{

    if((qtdlg *)obj == this && event->type()==QEvent::Timer )
    {
        // do some stuff
        return true;
    }
    return false;
}

不要忘记在构造函数中安装事件过滤器:

this->installEventFilter(this);