Я использую Qt 5.8. У меня есть свой пользовательский QFrame (назовите его MyQFrame), который состоит из нескольких других QWidgets и может (и будет) содержать другой экземпляр моего пользовательского MyQFrame. Я установил минимальный размер для MyQFrame. MyQFrame использует QGridLayout в качестве макета.
Этот MyQFrame помещается внутри QScrollArea в QTabWidget. QScrollArea настроен на изменение размера (setWidgetResizable(true)
). В MyQFrame я пытался установить политику размера для расширения (setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
) но это было безрезультатно.
Вот как (абстракция) я создаю QTabWidget и QScrollArea:
QTabWidget* tabWidget = new QTabWidget();
QScrollArea* firstTab = new QScrollArea();
firstTab->setWidgetResizable(true);
tabWidget->addTab(firstTab, "first tab");
MyQFrame* myFrame1 = new MyQFrame();
firstTab->setWidget(myFrame1);
// ... adding other MyQFrames inside this one using methods in MyQFrame ...
Я не могу заставить работать область прокрутки. Вместо расширения родителей вложенных MyQFrames и добавления полосы прокрутки последний дочерний элемент перекрывается другими MyQFrames. Похоже, мне не хватает чего-то вроде setWidgetResizable
для MyQFrames, но этот метод только в QScrollArea. Я понятия не имею, что я должен попробовать сейчас. Я все еще довольно новичок в этом.
Это должно быть более ясно из изображения ниже.
Как я уже сказал, я использую QGridLayout в MyQFrame. Я должен был установить ограничение размера для этого макета на минимальный размер, как это: layout->setSizeConstraint(QLayout::SetMinimumSize);
, Теперь работает так, как я хотел.
Других решений пока нет …