Я хочу сделать что-то довольно простое: добавить пользовательский виджет в дизайнер Qt, который в основном будет прокруткой, содержащей пользовательский вертикальный макет (я добавил некоторый код в вертикальный макет, чтобы обрабатывать его объекты для моих проектов). Идея заключалась в том, чтобы представить вертикальное меню, которое было бы сбоку от моего экрана.
Что я уже сделал
Я создал собственный плагин виджета и свой собственный макет.
Мои пользовательские коды виджетов выглядят так:
#include "menuwidget.h"
MenuWidget::MenuWidget(QWidget *parent) :
QScrollArea(parent)
{
this->setWidgetResizable(true);
QWidget* layoutHoldingWidget= new QWidget(this);
layout= new MenuLayout();
layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
layout->addStretch(1);
layoutHoldingWidget->setLayout(layout);
this->setWidget(layoutHoldingWidget);
}
Если я добавлю вручную в макет (в код конструктора) некоторые кнопки
for(int i =0;i<20;i++)
layout->addWidget(new QPushButton(this));
Это работает, и я вижу свою область прокрутки, содержащую несколько кнопок, что почти то, что я хочу.
Что я хочу
Я хотел бы иметь возможность добавлять эти кнопки непосредственно через дизайнер Qt: пользователь сначала перетаскивал бы пустой виджет MenuWidget в главное окно, а затем перетаскивал бы QPushButtons на мой пользовательский виджет точно так же, как он делал бы это в обычном вертикальном макете.
Возможно ли это? Как я мог сделать такое?
Спасибо ! :)
Изменить 1
Чего мне не хватало, так это виджета «scrollAreaWidgetContents», который всегда создается при перетаскивании QScrollArea. Я сделал то же самое, добавив виджет (назовем его containerWidget) в мою пользовательскую область прокрутки в ее функции domXml, которая позволяет мне перетаскивать виджеты в мою область прокрутки, как я хотел.
НО я все еще кое-что не могу понять: я хочу, чтобы у containerWidget был customLayout (myCustomLayout) . Если я добавлю его в функцию domXml, я получу в терминале следующую строку:
Дизайнер: тип макета «MyCustomLayout» не поддерживается, по умолчанию используется сетка.
Так что это означает, что я не могу сказать дизайнеру использовать мой пользовательский макет для размещения моих виджетов, что довольно печально: D
Есть ли здесь способ «обмануть»?