How to set an initial size of a QScrollArea?


Question

I know that this is a very specific C++ and Qt related question, but maybe someone can help me, anyway ...

See the code below: I want to display an image within a scroll area. The view port of the scroll area shall have a defined initial size. That means, if the image's size is bigger than the initial size of the view port, scroll bars will be visible, otherwise not.

// create label for displaying an image
QImage image( ":/test.png" );
QLabel *label = new QLabel( this );
label->setPixmap( image.toPixmap() );

// put label into scroll area
QScollArea *area = new QScrollArea( this );
area->setWidget( label );

// set the initial size of the view port
// NOTE: This is what I'd like to do, but this method does not exist :(
area->setViewPortSize( QSize( 300, 300 ) );

It shall be possible to resize the whole application so that the view port will get another size than the initial one.

Unfortunatelly I was not able to find out, how to set the size of the view port. Qt's layout mechanism seems to set a default size for the view port, but up to now I was not able to change it. Setting a new size with

area->setMinimumSize( QSize( 300, 300 ) );

will actually set the demanded size, but then the scroll area looses the ability to get resized to a size smaller than 300x300.

Any ideas?

1
3
10/27/2008 7:33:15 PM

Accepted Answer

I think that you are looking at the problem the wrong way. The QScrollArea is just a widget that you put in a frame or QMainWindow. The size of the widget is controlled by the layout of the widget that contains it.

Take a look at this example from Trolltech: Image Viewer Example

2
9/14/2015 6:17:23 PM

Is the scroll area the top level widget? If so, simply call

area->resize(300,300);

If it's inside a hierarchy you need to resize the toplevel appropriately (complex), or set the minimumSize of the area. You could also try to experiment with the LayoutPolicy - assuming the sizeHint is QSize(300,300) you can give it the appropriate size policy according to what's defined in https://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon