我有这个功能是qtdlg.cpp的一部分。
这是此类的构造函数:

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处理状态更改。例如,当更改窗口状态,更改标题或更改语言环境时,将调用此方法。因此它不会像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);

10-08 20:16