[Solved] Custom Widget with layout doesn’t resize
-
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
-
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 -
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.
-
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