Qt4:未解析的计时器事件
一个小样本文件Qt4:未解析的计时器事件,qt,events,timer,Qt,Events,Timer,一个小样本文件main.cpp: #include <iostream> #include <QCoreApplication> class MyApp : public QCoreApplication { private: int m_idtimer; public: MyApp(int nargs, char* argc[]) : QCoreApplication(nargs, argc) { m_idtimer = st
main.cpp
:
#include <iostream>
#include <QCoreApplication>
class MyApp : public QCoreApplication
{
private:
int m_idtimer;
public:
MyApp(int nargs, char* argc[]) : QCoreApplication(nargs, argc)
{
m_idtimer = startTimer(3000); // 3 segs.
}
protected:
void timerEvent(QTimerEvent* e)
{
char c = '\0';
std::cout << "timerEvent" << std::endl;
std::cin >> c;
if (c == 'q') {
killTimer(m_idtimer);
quit();
}
}
};
int main(int nargs, char* argc[])
{
MyApp app(nargs, argc);
return app.exec();
}
编制和执行:
$ make main
g++ -I/usr/include/qt4/QtCore main.cpp -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$
好的,然后,我的问题。我制作此示例的目的是测试计时器事件是否累积
当我执行main
程序时,下一步发生:
- 第一条
消息在3秒后显示,并且timerEvent
等待一个字符timerEvent()
- 我中间按
1
- 3秒钟后,出现第二条
消息(如预期)timerEvent
- 我等待几秒钟(15秒或更长),然后按
2
- 立即显示第三条消息(累计一个计时器事件)
- 我立即按
3
- 3秒钟后,第四条消息出现(不再累积计时器事件)
- 我按
,程序结束q
PD:我的Qt版本是4.8,我的SO Ubuntu版本是13.04,我的内核(linux)版本是3.8.0-19-generic。运行的图形系统是Gnome 3。您的15秒等待不会累积计时器事件,因为您的
timerEvent
代码块正在等待输入。在您输入输入之前,Qt无法返回其事件循环。当它返回到事件循环时,它会检查经过的时间,并注意到已经超过3秒,因此会触发计时器事件。十五秒已经过去这一事实无关紧要
这是预期的行为,不会(不应该)依赖于平台。您的15秒等待不会累积计时器事件,因为您的
timerEvent
代码块正在等待输入。在您输入输入之前,Qt无法返回其事件循环。当它返回到事件循环时,它会检查经过的时间,并注意到已经超过3秒,因此会触发计时器事件。十五秒已经过去这一事实无关紧要
这是预期的行为,不会(不应该)依赖于平台
$ make main
g++ -I/usr/include/qt4/QtCore main.cpp -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$