I have a QScrollArea, and I want the widget inside its viewPort to be resized to the maximum viewport size.
I have my class Dialog derived from QDialog and I have redefined resizeEvent() method, as follows:
#include <QVBoxLayout>
{
sa->setMinimumSize(400,300);
sa->setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOn );
sa->setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOn );
sa->setWidget(qd);
mainLayout->addWidget(sa);
setLayout(mainLayout);
}
Dialog::~Dialog()
{
delete qd;
delete sa;
delete layout();
}
#include <cstdio>
{
qd->resize(sa->viewport()->contentsRect().size());
str
= "sa->viewport()->contentsRect().size() " + QString::number(sa
->viewport
()->contentsRect
().
size().
width()) + "," + QString::number(sa
->viewport
()->contentsRect
().
size().
height());
printf("%s\n", str.toAscii().constData());
}
#include <QVBoxLayout>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
sa = new QScrollArea(this);
sa->setMinimumSize(400,300);
sa->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
sa->setVerticalScrollBarPolicy ( Qt::ScrollBarAlwaysOn );
sa->setHorizontalScrollBarPolicy ( Qt::ScrollBarAlwaysOn );
qd = new QDial(this);
qd->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
sa->setWidget(qd);
QVBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->addWidget(sa);
setLayout(mainLayout);
}
Dialog::~Dialog()
{
delete qd;
delete sa;
delete layout();
}
#include <cstdio>
void Dialog::resizeEvent ( QResizeEvent * event )
{
qd->resize(sa->viewport()->contentsRect().size());
QString str;
str = "sa->viewport()->contentsRect().size() " + QString::number(sa->viewport()->contentsRect().size().width()) + "," + QString::number(sa->viewport()->contentsRect().size().height());
printf("%s\n", str.toAscii().constData());
}
To copy to clipboard, switch view to plain text mode
Once started I expect the QDial to be resized to viewPort size, but I obtain the following:

And on the console it is wrote:
sa->viewport()->contentsRect().size() 96,26
as if the QScrollArea was something like 100x30. But if I try to resize all works, so the piece of code in resizeEvent() works.
What is wrong? Where is the mistake?
I also attach the project
thanks
Bookmarks