ミニ サンプル ファイル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 秒後に表示され、1timerEvent()
文字待機します。 - 一気に押し
1
ます。 - 3 秒後、2 番目の
timerEvent
メッセージが表示されます (予想どおり)。 - 数秒(15秒以上)待ってから押します
2
- 3 番目のメッセージがすぐに表示されます (1 つのタイマー イベントが蓄積されます)。
3
すぐ押します。- そして 3 秒後に 4 番目のメッセージが表示されます (これ以上タイマー イベントは蓄積されません)。
- を押す
q
とプログラムが終了します。
質問: タイマー イベントが蓄積されないのはなぜですか? この動作はプラットフォームに依存しますか?
PD: Qt のバージョンは 4.8、SO Ubuntu 13.04、カーネル (Linux) は 3.8.0-19-generic です。実行中のグラフィック システムは Gnome 3 です。