QScrollArea not working as expected with QWidget and QVBoxLayout

帅比萌擦擦* 提交于 2019-12-05 11:26:31

You messed up the stack of items. The idea of having scrollable area is like this:

  • on the bottom is parent widget (for example QDialog)
  • on top of this is scrollable area (QScrollArea) of fixed size
  • on top of this is a widget (QWidget) of some size, where usually only part of it is visible (it's supposed to be bigger than scrollarea)
  • on top of this is a layout
  • and the last: layout manages child items (couple of QPushButton here)

Try this code:

int
main( int _argc, char** _argv )
{
    QApplication app( _argc, _argv );

    QDialog * dlg = new QDialog();
    dlg->setGeometry( 100, 100, 260, 260);

    QScrollArea *scrollArea = new QScrollArea( dlg );
    scrollArea->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
    scrollArea->setWidgetResizable( true );
    scrollArea->setGeometry( 10, 10, 200, 200 );

    QWidget *widget = new QWidget();
    scrollArea->setWidget( widget );

    QVBoxLayout *layout = new QVBoxLayout();
    widget->setLayout( layout );

    for (int i = 0; i < 10; i++)
    {
        QPushButton *button = new QPushButton( QString( "%1" ).arg( i ) );
        layout->addWidget( button );
    }

    dlg->show();

    return app.exec();
}

Worth to mention about QScrollArea::setWidgetResizable, which adjusts the child widget size dynamically according to its content.

And the result looks like this:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!