Почему размер QScrollArea ограничен?

На мой пользовательский виджет, унаследованный от QWidget, Я добавил QScrollArea как это:

MainWindow::MainWindow(QWidget *parent) :
QWidget(parent)//MainWindow is a QWidget
{
auto *scrollArea = new QScrollArea(this);
auto *widget = new QWidget(this);

widget->setStyleSheet("background-color:green");

scrollArea->setWidget(widget);
scrollArea->setWidgetResizable(true);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QVBoxLayout *parentLayout = new QVBoxLayout(widget);

this->setStyleSheet("background-color:blue");

for(int i=0;i<12;i++){
QHBoxLayout* labelLineEdit = f1();
parentLayout->addStretch(1);
parentLayout->addLayout(labelLineEdit);
}

parentLayout->setContentsMargins(0,0,40,0);
}

QHBoxLayout* MainWindow::f1()
{

QHBoxLayout *layout = new QHBoxLayout;

QLabel *label = new QLabel("Movie");
label->setStyleSheet("background-color:blue;color:white");
label->setMinimumWidth(300);
label->setMaximumWidth(300);

layout->addWidget(label);

QLineEdit *echoLineEdit = new QLineEdit;
echoLineEdit->setMaximumWidth(120);
echoLineEdit->setMaximumHeight(50);
echoLineEdit->setMinimumHeight(50);

echoLineEdit->setStyleSheet("background-color:white");

layout->addWidget(echoLineEdit);

layout->setSpacing(0);

return layout;
}

Это создает окно, которое выглядит так:

введите описание изображения здесь

Проблема в том, что я хочу scrollArea занять все окно, но это не так. Это также не изменяется, когда я изменяю размер окна.

Как я мог это исправить?

1

Решение

Проблема в том, что я хочу, чтобы область прокрутки занимала всю
окно, но это не так. Это также не изменяется, когда я изменяю размер окна.

Причина в том, что вы не установили какой-либо вид макета для управления позиционированием вашего QScrollArea Сам виджет, так что он просто оставлен на его собственные устройства (и поэтому он просто выбирает размер и местоположение по умолчанию для себя и остается в этом размере и местоположении).

Простым решением будет добавить эти строки в нижней части вашего MainWindow конструктор:

QBoxLayout * mainLayout = new QVBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->addWidget(scrollArea);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]