Я хочу использовать QTimer в своем обычном классе (не приложение QT, но полученное из QTimer). но когда я пробую это:
Заголовок:
#include <qtimer.h>
QTimer* m_timer;
public slots:
void UpdateClock();
Источник:
m_timer = new QTimer(this);
QObject::connect(m_timer, SIGNAL(timeout()), this, SLOT(UpdateClock()));
m_timer->start(1000);
void MyClass::UpdateClock()
{
int i = 0;
}
таймер никогда не перескакивает в метод UpdateClock! Вы знаете, почему и как я решаю эту проблему?
Благодарю!
QTimer зависит от QCoreApplication. Если вы не запустите QCoreApplication, ничего не активирует QTimer. (QApplication наследует QCoreApplication и обычно используется.)
Если вы хотите использовать сигналы и слоты в Qt, вам нужен цикл событий для обработки сигналов и отправки их.
Обычно в main.cpp у вас есть что-то вроде:
int main( int argc, char** argv )
{
QApplication app(argc, argv);
...
return app.exec(); // the event loop is started and runs here
}
Если нет необходимости в графическом интерфейсе, вы можете использовать
QCoreApplication
Вы также можете создать свой собственный цикл событий, используя:
QEventLoop
http://qt-project.org/doc/qt-4.8/qeventloop.html и обрабатывать только событие QTimer. Однако вам все равно нужно создать QApplication.
sleep()