Archived:QTimer example
Archived: This article is archived because it is not considered relevant for third-party developers creating commercial solutions today. If you think this article is still relevant, let us know by adding the template {{ReviewForRemovalFromArchive|user=~~~~|write your reason here}}.
Qt Quick should be used for all UI development on mobile devices. The approach described in this article (using C++ for the Qt app UI) is deprecated.
Qt Quick should be used for all UI development on mobile devices. The approach described in this article (using C++ for the Qt app UI) is deprecated.
This article demonstrates how to use QTimer to trigger events. The demonstration app has a a number of buttons: when the timer expires we call setStyleSheet() and setProperty() on the buttons to change their appearance.
Article Metadata
Code Example
Source file: Media:Window.zip
Article
Created: divanov
(11 Jun 2010)
Last edited: hamishwillee
(11 Oct 2012)
Contents |
Main Class Implementation
#include <QtGui>
#include "window.h"
int main (int argc, char **argv)
{
QApplication app(argc, argv);
Window win;
win.show();
return app.exec();
}
Window Class Definition
#ifndef WINDOW_H
#define WINDOW_H
#include <QtGui>
#define NUM_OF_BUTTONS 50
class Window : public QMainWindow
{
Q_OBJECT
public:
Window(QWidget *parent=0);
private slots:
void buttonClicked(bool checked = false);
void timerTimeout();
private:
QPushButton *buttons[NUM_OF_BUTTONS];
QTimer *timer;
int timerCount;
};
#endif //WINDOW_H
When user press the button, timer started and will emit timeout() signal every second until 10 events will be produced or another button will be pressed
Window Class Implementation
#include "window.h"
Window::Window(QWidget *parent)
: QMainWindow(parent), timerCount(0)
{
QGridLayout *layout = new QGridLayout;
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 5; ++j) {
buttons[i * 5 + j] = new QPushButton("Button");
buttons[i * 5 + j]->setFocusPolicy(Qt::NoFocus);
layout->addWidget(buttons[i * 5 + j], i, j);
connect(buttons[i * 5 + j], SIGNAL(clicked(bool)), this, SLOT(buttonClicked(bool)));
}
QWidget *w = new QWidget;
w->setLayout(layout);
setCentralWidget(w);
timer = new QTimer(this);
timer->setInterval(1000);
connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeout()));
}
void Window::buttonClicked(bool checked)
{
Q_UNUSED(checked);
timerCount = 10;
if (!timer->isActive())
timer->start();
}
void Window::timerTimeout()
{
--timerCount;
if (timerCount <= 0)
timer->stop();
int idx = (qrand() % 50);
if (!buttons[idx]->property("coloured").isValid()) {
buttons[idx]->setStyleSheet("background-color: rgb(0, 255, 0); color: rgb(255, 255, 255)");
buttons[idx]->setProperty("coloured", true);
} else {
buttons[idx]->setStyleSheet("");
buttons[idx]->setProperty("coloured", QVariant());
}
}
when the timer expires it emit timerTimeout() slot which changes the property of the button.
Source Code
The full source code presented in this article is available here File:Window.zip


HI,
--somnathbanik 18:16, 23 May 2011 (EEST)