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. [SOLVED] QGraphicsView promotion
QtWS25 Last Chance

[SOLVED] QGraphicsView promotion

Scheduled Pinned Locked Moved General and Desktop
11 Posts 2 Posters 5.3k 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.
  • Chris KawaC Offline
    Chris KawaC Offline
    Chris Kawa
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi, welcome to devnet.

    Subclassing is not enough for a custom widget to show up in the editor. It's ok to promote to it but if you want the editor to show your custom widget you need to create a "designer plugin":http://qt-project.org/doc/qt-5/designer-creating-custom-widgets.html for that widget.

    1 Reply Last reply
    0
    • Q Offline
      Q Offline
      qounce
      wrote on last edited by
      #3

      Sorry, I said imprecisely. I launch the application I'm working on, it's window contains some buttons, menu toolbar & my object which inherited from QGraphicsView. All elements except my class' object are visible on window and work. More shortly) My object is visible in editor but not visible when I launch program. I know about designer plugin, but it is another problem.

      1 Reply Last reply
      0
      • Chris KawaC Offline
        Chris KawaC Offline
        Chris Kawa
        Lifetime Qt Champion
        wrote on last edited by
        #4

        It's hard to say without more details. What's the layout situation? Does your class set any sizes, size policies, visibility flags etc. If it's possible provide some code samples.

        1 Reply Last reply
        0
        • Q Offline
          Q Offline
          qounce
          wrote on last edited by
          #5

          I don't set any object properties. I tried to set isEnabled(true), it's not helped. Also there is no any layouts which I set manually.
          My class is quiet simple. Here is header:
          @#ifndef HEXVIEW_H
          #define HEXVIEW_H

          #include <QGraphicsView>
          #include <QObject>

          class HexView : public QGraphicsView
          {
          Q_OBJECT
          public:
          HexView(QObject *parent = 0);
          //~HexView(){};

          protected:
          void wheelEvent(QWheelEvent *event);

          private slots:
          void setupMatrix();

          private:
          int viewZoom;
          };

          #endif // HEXVIEW_H
          @

          And source:
          @#include "hexview.h"
          #include <QDebug>
          #include <QWheelEvent>
          #include <qmath.h>

          #define D qDebug()

          HexView::HexView(QObject *parent) :
          QGraphicsView(),
          viewZoom(0)
          {
          }

          void HexView::wheelEvent(QWheelEvent *event)
          {
          viewZoom += (event->delta() / 40);
          setupMatrix();
          }

          void HexView::setupMatrix()
          {
          qreal scale = qPow( qreal(2), viewZoom / qreal(50) );
          QMatrix matrix;
          matrix.scale(scale, scale);
          setMatrix(matrix);
          update();
          }
          @

          In mainwindow.cpp:
          @scene = new HexScene ();
          ui->graphicsView->setScene(scene);@

          Editor:
          !http://i58.tinypic.com/15cbl6p.png(Designer form)!

          Application:
          !http://i61.tinypic.com/2pquf79.png(application)!

          1 Reply Last reply
          0
          • Chris KawaC Offline
            Chris KawaC Offline
            Chris Kawa
            Lifetime Qt Champion
            wrote on last edited by
            #6

            One error is that you're not passing the parent parameter to the QGraphicsView constructor.
            Apart from that you're setting some custom scene. Does it have a transparent background brush? Is it the same if you don't set scene at all?

            EDIT: And are you sure the widget is not there? Maybe just the color is different. Try to draw something.

            1 Reply Last reply
            0
            • Q Offline
              Q Offline
              qounce
              wrote on last edited by
              #7

              If I understand it correctly parent parameter is set to pass automatically, here is a part of ui_mainwindow.h related with graphicsView object:
              @graphicsView = new HexView(centralWidget);
              graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
              graphicsView->setGeometry(QRect(110, 110, 581, 361));@

              Yes, I'm creating custom scene too. These code:
              @qDebug() << endl << scene->backgroundBrush();@

              says: "QBrush(QColor(ARGB 1, 0, 0, 0) , NoBrush ) "
              I also tried to set my brush with scene->setBackgroundBrush() - no changes.
              Also, nothing is changed when I had set no scene for graphicsView.

              There is a screenshot with standard QGraphicsView, I didn't change any properties.
              !http://i58.tinypic.com/33e1u6e.png(s)!

              Anyway, thanks for your help Chris.

              1 Reply Last reply
              0
              • Chris KawaC Offline
                Chris KawaC Offline
                Chris Kawa
                Lifetime Qt Champion
                wrote on last edited by
                #8

                bq. If I understand it correctly parent parameter is set to pass automatically

                There's no such thing in c++. How is compiler suppose to know something like that?

                Here:
                @HexView::HexView(QObject *parent) : QGraphicsView(), viewZoom(0) { @
                you are explicitly calling a parameterless version of the QGraphicsView base constructor which gets nullptr as a parent. You should pass here what you get in the parameter of your constructor:
                @HexView::HexView(QObject *parent) : QGraphicsView(parent), viewZoom(0) { @
                This is always true when inheriting QObjects. What you've got is a real error, but I doubt it's the cause of this particular problem.

                Well there are no miracles so there must be some cause behind this. I just tested it and it works as expected. Can you maybe pack the whole project (or just stripped to the reproducible minimum) and share it somewhere?

                1 Reply Last reply
                0
                • Q Offline
                  Q Offline
                  qounce
                  wrote on last edited by
                  #9

                  It seems you are right. However an error occurs with your proposition:
                  "error: call of overloaded 'QGraphicsView(QObject*&)' is ambiguous",
                  "no known conversion for argument 1 from 'QObject*' to 'const QGraphicsView&'"
                  That error points on my poor c++ understanding.
                  I shall continue this number tomorrow. Thanks again, Chris.

                  1 Reply Last reply
                  0
                  • Chris KawaC Offline
                    Chris KawaC Offline
                    Chris Kawa
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    Ah yes, I missed it previously. The QGraphicsView is actually a QWidget, so it's a more derived class of QObject. Therefore your constructor signature is wrong.

                    It should be
                    @
                    //.h file
                    HexView(QWidget *parent = 0);

                    //.cpp file
                    HexView::HexView(QWidget *parent) : QGraphicsView(parent), viewZoom(0) {
                    @

                    With this error I can actually reproduce your problem so fixing the constructor signature should fix the issue.

                    1 Reply Last reply
                    0
                    • Q Offline
                      Q Offline
                      qounce
                      wrote on last edited by
                      #11

                      You are completely right. Problem solved.

                      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