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. how to create a progressbar circularguage in qt C++
Forum Updated to NodeBB v4.3 + New Features

how to create a progressbar circularguage in qt C++

Scheduled Pinned Locked Moved Unsolved General and Desktop
3 Posts 2 Posters 237 Views
  • 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.
  • B Offline
    B Offline
    Blackzero
    wrote on last edited by
    #1

    How can I create a progressbar circularguage like the one below, I didn't get anything similar to this for MainWindow C++ mostly using QML, is there any other way?

    fcddbbdc-9080-4480-980e-0b77aa63d06d-image.png

    J.HilkJ 1 Reply Last reply
    0
    • B Blackzero

      How can I create a progressbar circularguage like the one below, I didn't get anything similar to this for MainWindow C++ mostly using QML, is there any other way?

      fcddbbdc-9080-4480-980e-0b77aa63d06d-image.png

      J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #2

      @Blackzero

      #include < QApplication>
      #include <QWidget>
      #include <QPainter>
      
      class CircularProgress : public QWidget {
          Q_OBJECT
      
      public:
          CircularProgress(QWidget *parent = nullptr, double value = 0.0, QColor color = Qt::blue)
              : QWidget(parent), value(value), color(color) {
              setFixedSize(100, 100);
          }
      
      protected:
          void paintEvent(QPaintEvent *) override {
              QPainter painter(this);
              painter.setRenderHint(QPainter::Antialiasing);
      
              QRectF rectangle(10, 10, 80, 80);
              int startAngle = 90 * 16;
              int spanAngle = -value * 360 * 16;
      
              painter.setPen(QPen(Qt::gray, 10));
              painter.drawArc(rectangle, 0, 360 * 16);
      
              painter.setPen(QPen(color, 10));
              painter.drawArc(rectangle, startAngle, spanAngle);
      
              painter.setPen(Qt::black);
              painter.drawText(rectangle, Qt::AlignCenter, QString::number(value * 100) + "%");
          }
      
      private:
          double value;
          QColor color;
      };
      
      
      int main(int argc, char *argv[]) {
         QApplication a(argc, argv);
          QWidget window;
          QHBoxLayout *layout = new QHBoxLayout(&window);
      
          layout->addWidget(new CircularProgress(&window, 0.1, Qt::cyan));
          layout->addWidget(new CircularProgress(&window, 0.33, Qt::magenta));
          layout->addWidget(new CircularProgress(&window, 0.5, Qt::green));
          layout->addWidget(new CircularProgress(&window, 0.75, Qt::red));
          layout->addWidget(new CircularProgress(&window, 1.0, QColor{0,128,128}));
      
          window.setLayout(layout);
          window.show();
          return a.exec();
      }
      
      #include "main.moc"
      

      32c96295-15d2-4a2a-a1af-cf0eff31b3b8-image.png


      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      B 1 Reply Last reply
      5
      • J.HilkJ J.Hilk

        @Blackzero

        #include < QApplication>
        #include <QWidget>
        #include <QPainter>
        
        class CircularProgress : public QWidget {
            Q_OBJECT
        
        public:
            CircularProgress(QWidget *parent = nullptr, double value = 0.0, QColor color = Qt::blue)
                : QWidget(parent), value(value), color(color) {
                setFixedSize(100, 100);
            }
        
        protected:
            void paintEvent(QPaintEvent *) override {
                QPainter painter(this);
                painter.setRenderHint(QPainter::Antialiasing);
        
                QRectF rectangle(10, 10, 80, 80);
                int startAngle = 90 * 16;
                int spanAngle = -value * 360 * 16;
        
                painter.setPen(QPen(Qt::gray, 10));
                painter.drawArc(rectangle, 0, 360 * 16);
        
                painter.setPen(QPen(color, 10));
                painter.drawArc(rectangle, startAngle, spanAngle);
        
                painter.setPen(Qt::black);
                painter.drawText(rectangle, Qt::AlignCenter, QString::number(value * 100) + "%");
            }
        
        private:
            double value;
            QColor color;
        };
        
        
        int main(int argc, char *argv[]) {
           QApplication a(argc, argv);
            QWidget window;
            QHBoxLayout *layout = new QHBoxLayout(&window);
        
            layout->addWidget(new CircularProgress(&window, 0.1, Qt::cyan));
            layout->addWidget(new CircularProgress(&window, 0.33, Qt::magenta));
            layout->addWidget(new CircularProgress(&window, 0.5, Qt::green));
            layout->addWidget(new CircularProgress(&window, 0.75, Qt::red));
            layout->addWidget(new CircularProgress(&window, 1.0, QColor{0,128,128}));
        
            window.setLayout(layout);
            window.show();
            return a.exec();
        }
        
        #include "main.moc"
        

        32c96295-15d2-4a2a-a1af-cf0eff31b3b8-image.png

        B Offline
        B Offline
        Blackzero
        wrote on last edited by
        #3

        @J-Hilk Thank you sir

        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