QScrollArea not working as expected with QWidget and QVBoxLayout

前端 未结 1 1078
故里飘歌
故里飘歌 2021-01-02 22:55

So I have this QFrame which is the parent widget (represented by this in the code). In this widget, I want to place a QWidget at 10 px

1条回答
  •  再見小時候
    2021-01-02 23:03

    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:

    enter image description here

    0 讨论(0)
提交回复
热议问题