したがって、いくつかの異なる問題がありました。
QFormLayout
他のレイアウトのように拡張しないでください。私のウィジェット (そのうちのいくつか) はQFormLayout
. これにより、それらの拡張が妨げられました。メインの親レイアウトを から に切り替えましQFormLayout
たQVBoxLayout
。これは私が使用しなければならなかったQLayout::setAlignment(Qt::AlignTop)
- これにより、他のいくつかのウィジェットが展開されないといういくつかの問題が修正されました。ただし、これらのウィジェットは
QVBoxLayout
. 上記のウィジェットはQFormLayout
. この展開を取得するには、次の行を my で使用する必要がありましたQSpacerItem
。
QSpacerItem * my_spacer = new QSpacerItem(0,1000, QSizePolicy::Expanding, QSizePolicy::Expanding);
私はいくつかのサンプルコードを提供しています。目標は、階層と QFormLayout が問題を引き起こす場所を示すことです。
コード例:
//A main Widget class
void SetupLayout()
{
QHBoxLayout * main_layout = new QHBoxLayout();
main_layout->addWidget(Some_Widget);
//Create a control widget
control_widget = new QWidget(); // IMPORTANT control_widget is a member
QVBoxLayout * layout = new QVBoxLayout(); //IMPORTANT!!!! - Here it was QFormLayout
layout->setAlignment(Qt::AlignTop); //IMPORTANT - Needed this after switching to QVBoxLayout
layout->addWidget(new QComboBox("stuff")); //Some combo box
control_widget->setLayout(layout);
main_layout->addWidget(control_widget);
}
//Later on, we have a "Put a new widget in the control area" task
void NewControlArea()
{
if(current_control)
control_widget->removeWidget(current_control); //current_control is a member variable
current_control = new MyWidget(); //FROM ABOVE
control_widget->addWidget(current_control);
}
MyWidget
を使用する場合QFormLayout
、サイズのヒントを含むスペーサーを追加しない限り、物事は展開されません。ただし、MyWidget
を使用するQVBoxLayout
と、そのQWidgets
中のすべてが正しく展開されます。