所以有几个不同的问题:
QFormLayout
不要像其他布局一样扩展。我的小部件(其中一些)被放入QFormLayout
. 这阻止了他们的扩张。我将我的主要父布局从 切换QFormLayout
到QVBoxLayout
. 这让我不得不使用QLayout::setAlignment(Qt::AlignTop)
- 这解决了我的一些其他小部件没有扩展的一些问题。但是这些小部件使用
QVBoxLayout
。上面的小部件使用QFormLayout
. 为了得到这个扩展,我必须在我的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
使用 a QFormLayout
,除非我添加带有大小提示的垫片,否则不会扩展。但是,如果MyWidget
使用 a QVBoxLayout
,则其中的任何QWidgets
内容都会正确展开。