У меня есть два примера, где я в основном создаю объекты-оболочки, а не то, что в идеале было бы простым преобразованием.
Если 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?" ) );
Виджет не должен иметь макет. Вы можете добавить дочерние виджеты в виджет, установив виджет в качестве их родителя. Но тогда вам придется вручную настроить размер и положение дочерних виджетов.
Просто всегда можно написать свои собственные функции-обертки:
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;
}