Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. 3rd Party Software
  4. [Solved] Custom Widget with layout doesn’t resize
Forum Updated to NodeBB v4.3 + New Features

[Solved] Custom Widget with layout doesn’t resize

Scheduled Pinned Locked Moved 3rd Party Software
10 Posts 2 Posters 21.8k Views 1 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.
  • M Offline
    M Offline
    mmkk15
    wrote on last edited by
    #1

    Hi there,
    I've written a custom widget with the following code:

    @QPlot::QPlot(QWidget *parent) : QWidget(parent)
    {
    // Create vertical layout ---------------------------------------------------------------
    m_vLayout = new QVBoxLayout();
    // Set vertical layout margin to zero
    m_vLayout->setMargin(0);

    // Create horizontal layout
    m_hLayout = new QHBoxLayout();
    // Set horizontal layout to zero
    m_hLayout->setMargin(0);
    m_hLayout->setSpacing(20);

    // Add horizontal layout to vertical layout
    m_vLayout->addLayout(m_hLayout);

    // Pause button --------------------------------------------------------------------------
    m_pbPause = new QPushButton("Pause", this);
    m_hLayout->addWidget(m_pbPause);
    connect (m_pbPause, SIGNAL(clicked()), this, SLOT(on_m_pbPause_clicked()));

    // Element count button (plot speed) -----------------------------------------------------
    m_pbElementCount = new QPushButton("Plot speed: 0", this);
    m_hLayout->addWidget(m_pbElementCount);
    connect (m_pbElementCount, SIGNAL (clicked()), this, SLOT(on_m_pbElementCount_clicked()));

    // Autoscale button ----------------------------------------------------------------------
    m_pbAutoScale = new QPushButton("AutoScale", this);
    m_hLayout->addWidget(m_pbAutoScale);
    connect (m_pbAutoScale, SIGNAL(clicked()), this, SLOT(on_pbAutoscale_clicked()));

    // Create new GL plot --------------------------------------------------------------------
    m_glplot = new QGLPlot(this);
    // Add glPlot to vertical layout
    m_vLayout->addWidget(m_glplot);

    // Make vertical layout the layout of the QPlot widget
    this->setLayout(m_vLayout);
    }
    @

    it comprises a vertical layout, in which a horizontal layout is added, which holds three buttons. Then a custom GLWidget for plotting data is in the "second" line of the vertical layout.
    In the designer I've got an tab with two widget which have been promoted to the custom QPlot widget. The tab itself has a vertical layout. So far everything works fine:
    !http://85.25.64.68/1.png(Pic 1)!
    Now I want to change the size of the GLWidget by setting its max. size:
    @
    this->setMaximumHeight(30);
    @
    This also works but, the layout is not adjusting to the new size of the widget. I wanna use that to give the other plot more room, and thus resulting in a bigger size.
    Here's a pic of the problem:
    !http://85.25.64.68/2.png(Pic 2)!

    I hope anyone can give me a hint where to search for. I've already played with the sizePolicy setting, but no luck. UpdateGeometry() also didn't do the trick ...

    Thanks in advance and best regards,

    Mike

    1 Reply Last reply
    0
    • EddyE Offline
      EddyE Offline
      Eddy
      wrote on last edited by
      #2

      You should use sizehint instead of size everytime you use widgets in a layout.

      Qt Certified Specialist
      www.edalsolutions.be

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mmkk15
        wrote on last edited by
        #3

        Hi Eddy,
        thanks for your reply. I'm not exactly sure what you mean. The manual says "sizeHint: This property holds the recommended size for the widget." But sizeHint itself is const. But can be changed by the functions: setMinimumSize, setMaximumHeight, setMaximumWidth. Did I miss a function?

        Greetings,
        Mike

        1 Reply Last reply
        0
        • EddyE Offline
          EddyE Offline
          Eddy
          wrote on last edited by
          #4

          what you need is layoutstretch

          In my opinion it is easier to experiment with this in Qt Designer. There you see all the properties of your vertical layout. And you can preview what you try without compiling everytime.

          Setmaximumheight is meant for widgets that are not in a layout.

          Qt Certified Specialist
          www.edalsolutions.be

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mmkk15
            wrote on last edited by
            #5

            Hi Eddy,
            I know what layoutstretch does and you're 100% right. Thats what I need. The question now is:

            Can I control the "parent" layout in which my widget is in?

            What I want is, that if I double click on the plot, it shall shrink to a lower height ("minimize" ), giving the other widgets in the layout more "room".

            I've been playing with this:
            @this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);@

            and

            @this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);@

            and this seems to work almost as wanted. But I cannot control the max height of the widget. When I debug the sizeHint of my custom Widget:

            @qDebug () << this->sizeHint();@

            it says:
            QSize(-1, -1)
            although I've set the minimum height and width before with:
            @
            this->setMinimumSize (100, 30);
            @

            Thanks again for your post! I really appreciate it!

            Greetings,
            Mike

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mmkk15
              wrote on last edited by
              #6

              I think I've got it. Within the designer I set the minimum height of the custom widget to 60 for example. In combination with the setSizePolicy functions that did the trick ...

              Thanks again Eddy!

              Greetings,
              Mike

              1 Reply Last reply
              0
              • EddyE Offline
                EddyE Offline
                Eddy
                wrote on last edited by
                #7

                My pleasure, but basically you solved it. I was just thinking out loud without Qt Creator, using my mobile.

                Glad you made it. Your program looks cool.

                By the way do you know qwt? It's great for making graphs like yours.

                Qt Certified Specialist
                www.edalsolutions.be

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  mmkk15
                  wrote on last edited by
                  #8

                  Thanks. I've look at qwt and it's really cool! I think I've started doing my own plot widget, just because of the fun of it ;-)

                  Greetings,
                  Mike

                  1 Reply Last reply
                  0
                  • EddyE Offline
                    EddyE Offline
                    Eddy
                    wrote on last edited by
                    #9

                    In that case have fun.

                    By the way, could you edit your title and put [Solved] at the beginning. Just a convention in this forum to let everybody know the status of this topic.

                    Qt Certified Specialist
                    www.edalsolutions.be

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      mmkk15
                      wrote on last edited by
                      #10

                      Thanks & done ...

                      Greetings,
                      Mike

                      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