我有这个功能是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);