• GammaRay User Manual
  • GammaRay User Manual
  • Timer
  • timer.cpp Example File
  • GammaRay User Manual 2.9.0
  • timer.cpp Example File

    timer/timer.cpp
    /*
      timer.cpp
    
      This file is part of GammaRay, the Qt application inspection and
      manipulation tool.
    
      Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com
      Author: Volker Krause <volker.krause@kdab.com>
    
      Licensees holding valid commercial KDAB GammaRay licenses may use this file in
      accordance with GammaRay Commercial License Agreement provided with the Software.
    
      Contact info@kdab.com if any conditions of this licensing are not clear to you.
    
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation, either version 2 of the License, or
      (at your option) any later version.
    
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
    
      You should have received a copy of the GNU General Public License
      along with this program.  If not, see <http://www.gnu.org/licenses/>.
    */
    
    #include <QApplication>
    #include <QPushButton>
    #include <QVBoxLayout>
    #include <QTimer>
    #include <QTimerEvent>
    #include <QWidget>
    
    class MyUpdateTimer : public QObject
    {
        Q_OBJECT
    public:
        explicit MyUpdateTimer(QWidget *widget, QObject *parent = nullptr)
            : QObject(parent)
            , m_widget(widget)
        {
        }
    
        void start()
        {
            startTimer(0);
        }
    
    protected:
        void timerEvent(QTimerEvent *event) override
        {
            Q_UNUSED(event);
            m_widget->repaint();
            // killTimer(event->timerId());
        }
    
    private:
        QWidget *m_widget;
    };
    
    int main(int argc, char **argv)
    {
        QApplication app(argc, argv);
    
        QWidget w;
        auto layout = new QVBoxLayout(&w);
    
        auto btn = new QPushButton("Create QTimer", &w);
        QObject::connect(btn, &QPushButton::clicked, &w, [&w]() {
            auto timer = new QTimer(&w);
            QObject::connect(timer, SIGNAL(timeout()), &w, SLOT(repaint()));
            timer->setInterval(0);
            // timer->setSingleShot(true);
            timer->start();
        });
        layout->addWidget(btn);
    
        btn = new QPushButton("Start Timer", &w);
        QObject::connect(btn, &QPushButton::clicked, &w, [&w]() {
            auto timer = new MyUpdateTimer(&w, &w);
            timer->start();
        });
        layout->addWidget(btn);
    
        w.show();
        return app.exec();
    }
    
    #include "timer.moc"