一个迷你示例文件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();
}
额外的迷你Makefile
:
LDFLAGS = -I/usr/include/qt4 -I/usr/include/qt4/QtCore
LDLIBS = -lQtCore
编译和执行:
$ make main
g++ -I/usr/include/qt4/QtCore main.cpp -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$
好的,然后,我的问题。我制作这个示例的目的是测试计时器事件是否是累积的。
当我执行main
程序时,接下来会发生:
- 第一
timerEvent
条消息在 3 秒后显示,并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。