Qt4: Nicht aufgelöste Timer-Ereignisse
Eine Mini-Beispieldateimain.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();
}
Extra MiniMakefile
:
LDFLAGS = -I/usr/include/qt4 -I/usr/include/qt4/QtCore
LDLIBS = -lQtCore
Kompilieren und Ausführen:
$ make main
g++ -I/usr/include/qt4/QtCore main.cpp -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$
Ok und dann meine Frage. Ich habe dieses Beispiel erstellt, um zu testen, ob Timer-Ereignisse kumulativ sind.
Wenn ich das ausführemain
Programm, das nächste tritt ein:
timerEvent
Meldung wird nach 3 Sekunden angezeigt, undtimerEvent()
wartet auf einen Charakter.Ich drücke1
sofort.3 Sekunden später die SekundetimerEvent
Meldung erscheint (wie erwartet).Ich warte einige Sekunden (15 oder mehr) und drücke2
Die dritte Meldung wird sofort angezeigt (ein Timer-Ereignis wurde akkumuliert).Ich drücke3
sofort.Und 3 Sekunden später erscheint die vierte Meldung (keine Timer-Ereignisse mehr akkumuliert).Ich drückeq
und das Programm endet.Frage: Warum haben sich keine Timer-Ereignisse mehr angesammelt? Hängt dieses Verhalten von der Plattform ab?
PD: Meine Qt-Version ist 4.8, mein SO Ubuntu 13.04 und mein Kernel (Linux) 3.8.0-19-generic. Das laufende Grafiksystem ist Gnome 3.