我似乎在从QScrollArea
. 就目前而言,每当我将某些内容添加到设置为滚动区域目标的小部件的布局中时,它宁愿选择扩展整个窗口而不是适合滚动。
这是我当前的设置:
QSplitter * mainArea = new QSplitter( Qt::Vertical );
QWidget * containment = new QWidget;
containment->setLayout( new QVBoxLayout );
currentStructures = new QWidget;
currentStructures->setLayout( new QVBoxLayout );
currentStructures->layout()->setAlignment( Qt::AlignTop );
QScrollArea * scroll = new QScrollArea();
scroll->setWidget( currentStructures );
containment->layout()->addWidget( currentStructures );
mainArea->addWidget( containment );
mainArea->addWidget( new QWidget ); //TODO: create preview bar
this->layout()->addWidget( mainArea );
这使得滚动区域只会扩展并且永远不会显示滚动条。
通过插入这一行:
containment->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Ignored );
我可以让该区域忽略其子项的大小,但它也不会占用所需的空间,也不会显示滚动条——它只是压缩其中的小部件。
我对使用 Qt 有点陌生,但我想知道如何实现我需要的行为:我希望滚动区域贪婪地占用其父布局中可用的区域,但不扩展添加时垂直包含布局,但实际上显示滚动条。我计划允许大量调整大小,因此它需要实际缩放到父级,而不仅仅是固定大小。我不知道应该如何着手解决我的 GUI 的这方面问题。感谢您的时间。
如果您想直观地解决这个问题,这里有一个可以使用的线束。我非常感谢您的帮助。
#include <QtWidgets\qapplication.h>
#include <QtWidgets\qsplitter.h>
#include <QtWidgets\qlayout.h>
#include <QtWidgets\qscrollarea.h>
#include <QtWidgets\qpushbutton.h>
#include <QtWidgets\qlabel.h>
#include <QtWidgets\qsizepolicy.h>
int main( int argc, char * argv[] )
{
QApplication app( argc, argv );
QWidget * testWidget = new QWidget;
testWidget->setLayout( new QVBoxLayout );
//////////////////CODE IN QUESTIION//////////////////////
QSplitter * mainArea = new QSplitter( Qt::Vertical );
QWidget * containment = new QWidget;
containment->setLayout( new QVBoxLayout );
//containment->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Ignored );
QWidget * currentStructures = new QWidget;
currentStructures->setLayout( new QVBoxLayout );
currentStructures->layout()->setAlignment( Qt::AlignTop );
QScrollArea * scroll = new QScrollArea();
scroll->setWidget( currentStructures );
containment->layout()->addWidget( currentStructures );
mainArea->addWidget( containment );
///////////////////////////////////////////////////////////
QPushButton * pushIntoLayout = new QPushButton( "Add Element to Widget" );
QWidget::connect( pushIntoLayout, &QPushButton::clicked, [currentStructures](){ currentStructures->layout()->addWidget( new QLabel( "A generated label" ) ); } );
mainArea->addWidget( pushIntoLayout );
currentStructures->setStyleSheet(
"QWidget {"
"background-color: #FAA;"
"}"
);
testWidget->layout()->addWidget( mainArea );
testWidget->show();
return app.exec();
}