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