c++qtqscrollarea

How to set an initial size of a QScrollArea?


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.

Unfortunately, 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.


Solution

  • 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