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

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

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

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


person enderland    schedule 27.11.2012    source источник
comment
Вы не хотите использовать QScrollArea, верно? Подробное описание QAbstractScrollArea может помочь: doc.qt.digia.com/qt/qabstractscrollarea. html   -  person Daniel Castro    schedule 28.11.2012
comment
@DanielCastro Возможно, мне придется. Я бы предпочел избежать этого, я полагаю, поскольку это потребует переписывания приличного количества кода, но, похоже, единственный способ сделать такие вещи - не напрямую с макетом.   -  person enderland    schedule 28.11.2012


Ответы (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;
}

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

person jmk    schedule 28.11.2012