Qt4: Nierozwiązane zdarzenia timera
Mini przykładowy plikmain.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
Kompilowanie i wykonanie:
$ make main
g++ -I/usr/include/qt4/QtCore main.cpp -lQtCore -o main
$ ./main
timerEvent
1
timerEvent
2
timerEvent
3
timerEvent
q
$
Ok, a potem moje pytanie. Próbę wykonałem w celu sprawdzenia, czy zdarzenia czasowe są akumulacyjne.
Kiedy wykonujęmain
program następnej następuje:
timerEvent
wiadomość jest wyświetlana po 3 sekundach itimerEvent()
czeka na postać.Naciskam1
pośrednio.3 sekundy później, drugitimerEvent
pojawia się komunikat (zgodnie z oczekiwaniami).Czekam kilka sekund (15 lub więcej) i naciskam2
Trzeci komunikat jest wyświetlany natychmiast (nagromadziło się jedno zdarzenie licznika).Naciskam3
natychmiast.Po 3 sekundach pojawi się czwarty komunikat (nie zgromadzono już więcej zdarzeń timera).Naciskamq
i program się kończy.Pytanie: Dlaczego nie gromadzi się więcej zdarzeń timera? Czy to zachowanie zależy od platformy?
PD: Moja wersja Qt to 4.8, moja SO Ubuntu 13.04 i moje jądro (linux) 3.8.0-19-generic. Działającym systemem graficznym jest Gnome 3.