QScrollArea и Layout

431
23 декабря 2016, 14:20

Есть QScrollArea. В нее нужно засунуть n-ое количество виджетов так, чтобы все скролилось при нужде. Попробовал туда засунуть layout средствами setLayout(). Виджеты засовываются в него, но не скролится. На сколько я понял, туда должен быть помещен виджет, внутрь которого уже засовывать тот самый layout. Это так или можно сделать это как-то изящнее?

Мое предположение:

QScrollArea scroll = new QScrollArea;  
QWidget* widget = new QWidget;
QVBoxLayout* inside = new QVBoxLayout;  
widget->setLayout(inside);  
scroll->setWidget(widget);
Answer 1

Должно быть что-то вроде этого:

    QScrollArea* scroll = new QScrollArea;
    QWidget* ScrollAreaWidgetContents = new QWidget(scroll);
    QGridLayout* ScrollLayout = new QGridLayout(ScrollAreaWidgetContents);
    QWidget* widget = new QWidget;
    ScrollLayout ->addWidget(widget);

И первую строчку желательно заменить на

 QScrollArea* scroll = new QScrollArea(this);

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

READ ALSO
C++ как удалить границу окна в CFormView [требует правки]

C++ как удалить границу окна в CFormView [требует правки]

Имеется такая вот граница,обводка !

390
Упорядочение памяти (memory ordering) в QAtomicInteger

Упорядочение памяти (memory ordering) в QAtomicInteger

Имеется класс очереди запросов RequestQueue:

454
Свой layout в QMdiSubWindow

Свой layout в QMdiSubWindow

Как можно поставить свой QGridLayout в окно, наследующее от QMdiSubWindow? Попытка простого setLayout() выдаёт ворнинг, мол окно уже имеет свой layout

364