Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. CircularCountDown QWidget
Forum Updated to NodeBB v4.3 + New Features

CircularCountDown QWidget

Scheduled Pinned Locked Moved General and Desktop
2 Posts 2 Posters 706 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    alvinNew
    wrote on last edited by alvinNew
    #1

    Having problem creating a CircularCountDown QWidget class

    #ifndef CIRCULARCOUNTDOWN_H
    #define CIRCULARCOUNTDOWN_H
    #include <QWidget>
    #include <QtCore>
    #include <QSize>
    #include <QtGui>
    class CircularCountdown : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit CircularCountdown(int msec =5000, QWidget *parent =0 );
        ~CircularCountdown();
    
        void setDuration(int msec);
        int duration() const;
    public slots:
        void start();
        void stop();
        void pause();
        void resume();
    signals:
        void timeoutReached();
    protected:
        QSize sizeHint() const;
        void paintEvent(QPaintEvent *event);
    
    private:
        class Private;
        Private * const d;
    };
    #endif // CIRCULARCOUNTDOWN_H
    
    #include "circularcountdown.h"
    #include <QPaintEvent>
    #include <QTimeLine>
    #include <QPainter>
    
    
    class CircularCountdown::Private
    {
    public:
       Private(CircularCountdown *parent)
           : q(parent)
       {
    
       }
    
       CircularCountdown *q;
       QTimeLine *timeLine;
    };
    
    CircularCountdown::CircularCountdown(int msec, QWidget *parent):QWidget(parent), d(new Private(this))
    {
    
        setAutoFillBackground(false);
        d->timeLine->setFrameRange(0,720);
        d->timeLine->setDirection(QTimeLine::Backward);
    
        connect(d->timeLine,SIGNAL(frameChanged(int)), this, SLOT(repaint()));
        connect(d->timeLine,SIGNAL(finished()),this,SLOT(repaint()));
        connect(d->timeLine,SIGNAL(finished()),this, SIGNAL(timeoutReached()));
    }
    
    CircularCountdown::~CircularCountdown()
    {
    
    }
    
    void CircularCountdown::start()
    {
        d->timeLine->start();
    }
    
    void CircularCountdown::stop()
    {
        d->timeLine->stop();
    }
    
    
    
    void CircularCountdown::pause()
    {
    
        d->timeLine->setPaused(true);
    }
    
    void CircularCountdown::resume()
    {
        d->timeLine->setPaused(true);
    }
    
    
    
    QSize CircularCountdown::sizeHint() const
    {
        return QSize(16,16);
    }
    
    
    void CircularCountdown::paintEvent(QPaintEvent *event)
    {
        if (d->timeLine->state() == QTimeLine::Running || d->timeLine->state() == QTimeLine::Paused) {
               QPainter painter(this);
               painter.setBrush(QBrush(parentWidget()->palette().color(QPalette::Base),Qt::SolidPattern));
               painter.setRenderHint(QPainter::Antialiasing);
               painter.drawPie(this->rect().adjusted(2,2,-2,-2),90*16, -d->timeLine->currentFrame()*8);
    
               }
    }
    
    p3c0P 1 Reply Last reply
    0
    • A alvinNew

      Having problem creating a CircularCountDown QWidget class

      #ifndef CIRCULARCOUNTDOWN_H
      #define CIRCULARCOUNTDOWN_H
      #include <QWidget>
      #include <QtCore>
      #include <QSize>
      #include <QtGui>
      class CircularCountdown : public QWidget
      {
          Q_OBJECT
      
      public:
          explicit CircularCountdown(int msec =5000, QWidget *parent =0 );
          ~CircularCountdown();
      
          void setDuration(int msec);
          int duration() const;
      public slots:
          void start();
          void stop();
          void pause();
          void resume();
      signals:
          void timeoutReached();
      protected:
          QSize sizeHint() const;
          void paintEvent(QPaintEvent *event);
      
      private:
          class Private;
          Private * const d;
      };
      #endif // CIRCULARCOUNTDOWN_H
      
      #include "circularcountdown.h"
      #include <QPaintEvent>
      #include <QTimeLine>
      #include <QPainter>
      
      
      class CircularCountdown::Private
      {
      public:
         Private(CircularCountdown *parent)
             : q(parent)
         {
      
         }
      
         CircularCountdown *q;
         QTimeLine *timeLine;
      };
      
      CircularCountdown::CircularCountdown(int msec, QWidget *parent):QWidget(parent), d(new Private(this))
      {
      
          setAutoFillBackground(false);
          d->timeLine->setFrameRange(0,720);
          d->timeLine->setDirection(QTimeLine::Backward);
      
          connect(d->timeLine,SIGNAL(frameChanged(int)), this, SLOT(repaint()));
          connect(d->timeLine,SIGNAL(finished()),this,SLOT(repaint()));
          connect(d->timeLine,SIGNAL(finished()),this, SIGNAL(timeoutReached()));
      }
      
      CircularCountdown::~CircularCountdown()
      {
      
      }
      
      void CircularCountdown::start()
      {
          d->timeLine->start();
      }
      
      void CircularCountdown::stop()
      {
          d->timeLine->stop();
      }
      
      
      
      void CircularCountdown::pause()
      {
      
          d->timeLine->setPaused(true);
      }
      
      void CircularCountdown::resume()
      {
          d->timeLine->setPaused(true);
      }
      
      
      
      QSize CircularCountdown::sizeHint() const
      {
          return QSize(16,16);
      }
      
      
      void CircularCountdown::paintEvent(QPaintEvent *event)
      {
          if (d->timeLine->state() == QTimeLine::Running || d->timeLine->state() == QTimeLine::Paused) {
                 QPainter painter(this);
                 painter.setBrush(QBrush(parentWidget()->palette().color(QPalette::Base),Qt::SolidPattern));
                 painter.setRenderHint(QPainter::Antialiasing);
                 painter.drawPie(this->rect().adjusted(2,2,-2,-2),90*16, -d->timeLine->currentFrame()*8);
      
                 }
      }
      
      p3c0P Offline
      p3c0P Offline
      p3c0
      Moderators
      wrote on last edited by
      #2

      @alvinNew Please use ``` (3 backticks) for posting code blocks. Otherwise it is difficult for others to read it.

      157

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved