QT QVBoxLayout Определить / установить видимую область прокрутки

У меня есть QVBoxLayout, который содержит достаточно широкий контент, чтобы требовать горизонтальную полосу прокрутки. Я хочу иметь возможность установить видимую область (фактически эквивалент прокрутки через полосу прокрутки) с кодом.

Ничего внутри документация мне кажется, что я могу это сделать — и я не смог легко найти способы получить полосу прокрутки и изменить ее напрямую.

Как я могу изменить область просмотра QVBoxLayout с содержанием, превышающим размер макета?

1

Решение

QVBoxLayout не предоставляет никаких функций прокрутки, поэтому QScrollArea вероятно, будет самым простым решением (как было предложено). Это может быть не так сложно, как вы думаете.

К счастью, области прокрутки довольно просты в использовании. Вот простой пример, который оборачивает другой виджет в область прокрутки с горизонтальной полосой прокрутки:

#include <QApplication>
#include <QLabel>
#include <QScrollArea>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc, char** argv)
{
QApplication app(argc, argv);

// Force the label to be wide
QLabel* label = new QLabel("this is a very long label");
label->setMinimumWidth(300);

QWidget* widget = new QWidget();
QVBoxLayout* layout = new QVBoxLayout(widget);
layout->addWidget(label);

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

// Force the scroll area to be smaller
scrollArea->resize(200, 100);
scrollArea->show();

app.exec();
return 0;
}

Одна хитрость в областях прокрутки — это контроль их размера (а не размера их содержимого). Они определяют подсказку фиксированного размера, поэтому по умолчанию они не могут изменить размер по желанию. Помните, что подсказка по размеру внешней области прокрутки и / или политика определения размера будут определять способ ее изменения в макете.

0

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

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