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. QGraphicsItem how to change the boundary colors of the rectangale

QGraphicsItem how to change the boundary colors of the rectangale

Scheduled Pinned Locked Moved Unsolved General and Desktop
19 Posts 4 Posters 12.7k Views 3 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #4

    Hi
    Where you draw it. just change the pen.
    http://doc.qt.io/qt-5/qpainter.html#pen
    QPen mypen(White)
    painter.setPen(mypen)

    please see the docs
    http://doc.qt.io/qt-5/qpen.html

    1 Reply Last reply
    1
    • Q Offline
      Q Offline
      Qt Enthusiast
      wrote on last edited by Qt Enthusiast
      #5

      Once it is drawn , I want to change the boundary on already drawn rectangle on a button click

      For example I want to change the boundary when on a button click and I have object of QGraphicitem , if you could guide me

      Currently I have slot was following but clears the fill color of the QGraphictsitem

      class myItem :: QGraphictsitem {

      private
      }

      void GQPhyItem::updateConfig()
      {
      QColor color = QColor(Qt::red);
      brush.setColor(color);
      brush.setStyle(color);
      }

      mrjjM 1 Reply Last reply
      0
      • Q Qt Enthusiast

        Once it is drawn , I want to change the boundary on already drawn rectangle on a button click

        For example I want to change the boundary when on a button click and I have object of QGraphicitem , if you could guide me

        Currently I have slot was following but clears the fill color of the QGraphictsitem

        class myItem :: QGraphictsitem {

        private
        }

        void GQPhyItem::updateConfig()
        {
        QColor color = QColor(Qt::red);
        brush.setColor(color);
        brush.setStyle(color);
        }

        mrjjM Offline
        mrjjM Offline
        mrjj
        Lifetime Qt Champion
        wrote on last edited by mrjj
        #6

        @Qt-Enthusiast

        Well first u need to be able to change it. and get the effect you want.

        When that works, you need to make a slot in the item so you can
        ask it to change.

        Then you need to hook up the button so it triggers this slots to change the pen.

        1 Reply Last reply
        1
        • Q Offline
          Q Offline
          Qt Enthusiast
          wrote on last edited by
          #7

          if you could point me to sample code that will be helpful

          mrjjM 1 Reply Last reply
          0
          • Q Qt Enthusiast

            if you could point me to sample code that will be helpful

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by
            #8

            @Qt-Enthusiast
            sorry didnt see any sample code.
            Its covered by QPainter and QPens docs.

            1 Reply Last reply
            1
            • Q Offline
              Q Offline
              Qt Enthusiast
              wrote on last edited by
              #9

              how to get pointer of Qpainter and QPen
              objects in QGraphicsitem

              mrjjM 1 Reply Last reply
              0
              • Q Qt Enthusiast

                how to get pointer of Qpainter and QPen
                objects in QGraphicsitem

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #10

                @Qt-Enthusiast
                In paintevent you have painter.
                it has both.

                1 Reply Last reply
                1
                • Q Offline
                  Q Offline
                  Qt Enthusiast
                  wrote on last edited by Qt Enthusiast
                  #11

                  so you mean after the slot
                  can I need to call i assume you have myItem::paintEvent ? is called automatcially after the slot

                  mrjjM 1 Reply Last reply
                  0
                  • Q Qt Enthusiast

                    so you mean after the slot
                    can I need to call i assume you have myItem::paintEvent ? is called automatcially after the slot

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #12

                    @Qt-Enthusiast

                    • can I need to call i assume you have myItem::paintEvent ? is called automatcially after the slot

                    Not sure what u say here :)

                    1 Reply Last reply
                    1
                    • ? Offline
                      ? Offline
                      A Former User
                      wrote on last edited by A Former User
                      #13

                      Hi! Here is a minimal example. Note that we need to derive our custom item not from QGraphicsItem but from QGraphicsObject so that we can use signals and slots with it.

                      mainwindow.cpp

                      #include "mainwindow.h"
                      #include "ui_mainwindow.h"
                      
                      #include <QGraphicsScene>
                      #include "myitem.h"
                      
                      MainWindow::MainWindow(QWidget *parent) :
                          QMainWindow(parent),
                          ui(new Ui::MainWindow)
                      {
                          ui->setupUi(this);
                          QGraphicsScene *scene = new QGraphicsScene;
                          MyItem *myItem = new MyItem();
                          scene->addItem( myItem );
                          ui->graphicsView->setScene(scene);
                          // ui->pushButton_2 is the button to toggle the color of your rectangle
                          connect(ui->pushButton_2, &QPushButton::clicked, myItem, &MyItem::toggleColor);
                      }
                      

                      myitem.h

                      #ifndef MYITEM_H
                      #define MYITEM_H
                      
                      #include <QGraphicsObject> 
                      
                      // it uses signals & slots, so inheriting from QGraphicsItem wouldn't be enough
                      class MyItem : public QGraphicsObject
                      {
                          Q_OBJECT
                      public:
                          MyItem(QGraphicsItem *parent = Q_NULLPTR);
                          QRectF boundingRect() const override;
                          void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
                      
                      public slots:
                          void toggleColor();
                      
                      private:
                          const qreal m_penWidth = 10;
                          bool m_color = false; // color of the rectangle; true = lime, false = purple
                      };
                      
                      #endif // MYITEM_H
                      

                      myitem.cpp

                      #include "myitem.h"
                      
                      #include <QPen>
                      #include <QPainter>
                      
                      
                      MyItem::MyItem(QGraphicsItem *parent)
                          : QGraphicsObject(parent)
                      {
                      }
                      
                      QRectF MyItem::boundingRect() const
                      {
                          return QRectF(-20 - m_penWidth / 2, -20 - m_penWidth / 2, 40 + m_penWidth, 40 + m_penWidth);
                      }
                      
                      void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
                      {
                          Q_UNUSED(option)
                          Q_UNUSED(widget)
                          QPen pen( m_color ? QColor("lime") : QColor("purple") );
                          pen.setWidth(m_penWidth);
                          painter->setPen(pen);
                          painter->drawRect(-20, -20, 40, 40);
                      }
                      
                      void MyItem::toggleColor()
                      {
                          m_color = !m_color;
                          update();
                      }
                      

                      Hope it helps!

                      C 1 Reply Last reply
                      2
                      • Q Offline
                        Q Offline
                        Qt Enthusiast
                        wrote on last edited by
                        #14

                        One more question , how to get filled color of colored QGraphicsitem filled rectangle

                        1 Reply Last reply
                        0
                        • ? A Former User

                          Hi! Here is a minimal example. Note that we need to derive our custom item not from QGraphicsItem but from QGraphicsObject so that we can use signals and slots with it.

                          mainwindow.cpp

                          #include "mainwindow.h"
                          #include "ui_mainwindow.h"
                          
                          #include <QGraphicsScene>
                          #include "myitem.h"
                          
                          MainWindow::MainWindow(QWidget *parent) :
                              QMainWindow(parent),
                              ui(new Ui::MainWindow)
                          {
                              ui->setupUi(this);
                              QGraphicsScene *scene = new QGraphicsScene;
                              MyItem *myItem = new MyItem();
                              scene->addItem( myItem );
                              ui->graphicsView->setScene(scene);
                              // ui->pushButton_2 is the button to toggle the color of your rectangle
                              connect(ui->pushButton_2, &QPushButton::clicked, myItem, &MyItem::toggleColor);
                          }
                          

                          myitem.h

                          #ifndef MYITEM_H
                          #define MYITEM_H
                          
                          #include <QGraphicsObject> 
                          
                          // it uses signals & slots, so inheriting from QGraphicsItem wouldn't be enough
                          class MyItem : public QGraphicsObject
                          {
                              Q_OBJECT
                          public:
                              MyItem(QGraphicsItem *parent = Q_NULLPTR);
                              QRectF boundingRect() const override;
                              void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
                          
                          public slots:
                              void toggleColor();
                          
                          private:
                              const qreal m_penWidth = 10;
                              bool m_color = false; // color of the rectangle; true = lime, false = purple
                          };
                          
                          #endif // MYITEM_H
                          

                          myitem.cpp

                          #include "myitem.h"
                          
                          #include <QPen>
                          #include <QPainter>
                          
                          
                          MyItem::MyItem(QGraphicsItem *parent)
                              : QGraphicsObject(parent)
                          {
                          }
                          
                          QRectF MyItem::boundingRect() const
                          {
                              return QRectF(-20 - m_penWidth / 2, -20 - m_penWidth / 2, 40 + m_penWidth, 40 + m_penWidth);
                          }
                          
                          void MyItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
                          {
                              Q_UNUSED(option)
                              Q_UNUSED(widget)
                              QPen pen( m_color ? QColor("lime") : QColor("purple") );
                              pen.setWidth(m_penWidth);
                              painter->setPen(pen);
                              painter->drawRect(-20, -20, 40, 40);
                          }
                          
                          void MyItem::toggleColor()
                          {
                              m_color = !m_color;
                              update();
                          }
                          

                          Hope it helps!

                          C Offline
                          C Offline
                          CorD SaC
                          wrote on last edited by
                          #15

                          @Wieland said in QGraphicsItem how to change the boundary colors of the rectangale:

                          ere is a minimal example. Note that we need to derive our custom item not from QGraphicsItem but from QGraphicsObject so that we can use signals and slots with it.
                          mainwindow.cpp
                          #include "mainwindow.h"
                          #include "ui_mainwindow.h"

                          #include <QGraphicsScene>
                          #include "myitem.h"

                          MainWindow::MainWindow(QWidget *parent) :
                          QMainWindow(parent),

                          Could you please explain why this error occur. ```
                          error: 'myitem' does not name a type
                          myitem *myitem = new myitem;

                          mrjjM 1 Reply Last reply
                          0
                          • C CorD SaC

                            @Wieland said in QGraphicsItem how to change the boundary colors of the rectangale:

                            ere is a minimal example. Note that we need to derive our custom item not from QGraphicsItem but from QGraphicsObject so that we can use signals and slots with it.
                            mainwindow.cpp
                            #include "mainwindow.h"
                            #include "ui_mainwindow.h"

                            #include <QGraphicsScene>
                            #include "myitem.h"

                            MainWindow::MainWindow(QWidget *parent) :
                            QMainWindow(parent),

                            Could you please explain why this error occur. ```
                            error: 'myitem' does not name a type
                            myitem *myitem = new myitem;

                            mrjjM Offline
                            mrjjM Offline
                            mrjj
                            Lifetime Qt Champion
                            wrote on last edited by
                            #16

                            @CorD-SaC

                            The myitem.h is a custom file

                            if you do not have it, it means that
                            it dont know what myitem is for a class.

                            • 'myitem' does not name a type
                              =
                              What the heck is "myitem" , compiler says
                            C 1 Reply Last reply
                            0
                            • mrjjM mrjj

                              @CorD-SaC

                              The myitem.h is a custom file

                              if you do not have it, it means that
                              it dont know what myitem is for a class.

                              • 'myitem' does not name a type
                                =
                                What the heck is "myitem" , compiler says
                              C Offline
                              C Offline
                              CorD SaC
                              wrote on last edited by
                              #17

                              @mrjj

                              problem is solved,I change the code, myitem *mi = new myitem(); instead of
                              //myitem *myitem = new myitem(); I don't know what was the reason,however after change the code like this,problem solved.

                              mrjjM 1 Reply Last reply
                              0
                              • C CorD SaC

                                @mrjj

                                problem is solved,I change the code, myitem *mi = new myitem(); instead of
                                //myitem *myitem = new myitem(); I don't know what was the reason,however after change the code like this,problem solved.

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by mrjj
                                #18

                                Oh the type (of the class) was used as variable also

                                like
                                int *int = new int()

                                that is not allowed :)

                                C 1 Reply Last reply
                                1
                                • mrjjM mrjj

                                  Oh the type (of the class) was used as variable also

                                  like
                                  int *int = new int()

                                  that is not allowed :)

                                  C Offline
                                  C Offline
                                  CorD SaC
                                  wrote on last edited by
                                  #19

                                  @mrjj

                                  Ooops,thanks :)

                                  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