Конвертировать между QLayout и QWidget

У меня есть два примера, где я в основном создаю объекты-оболочки, а не то, что в идеале было бы простым преобразованием.

Если foo это QWidget* создан ранее, могу ли я избежать создания оболочки QLayout для этого:

const auto layout = new QVBoxLayout();
layout->addWidget( foo );
const auto frame = new QLabel( QLatin1String( "Why Do I Need a Layout?" ) );
frame->setLayout( layout );

Если foo это QLayout* создан ранее, могу ли я избежать создания оболочки QWidget для этого:

const auto widget = new QWidget();
widget->setLayout( foo );
const auto tabs = new QTabWidget();
tabs->addTab( widget, QLatin1String( "Why Do I Need a Widget?" ) );

0

Решение

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

1

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

Просто всегда можно написать свои собственные функции-обертки:

QLayout* wrap(QWidget* w){
auto layout = new QVBoxLayout();
layout->addWidget( w );
return layout;
}
QWidget* wrap(QLayout* l){
auto widget = new QWidget();
widget->setLayout( l );
return widget;
}
1

По вопросам рекламы [email protected]