我想强迫我的空间扩大QFormLayout,但无论什么QFormLayout只使用QSpaceItem::sizeHint().有没有人知道解决这个问题的方法,或者处理这个问题的正确方法?
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
SetupLayout();
}
void MyWidget::SetupLayout()
{
QFormLayout * layout = new QFormLayout();
layout->addRow("Something1", new QComboBox());
layout->addRow("Something2", new QSpinBox());
//Spacer
layout->addItem(new QSpacerItem(0,10, QSizePolicy::Expanding, QSizePolicy::Expanding));
layout->addRow(QPushButton("Something3"));
setLayout(layout);
}
Run Code Online (Sandbox Code Playgroud)
所以有几个不同的问题:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果MyWidget使用 a QFormLayout,除非我添加带有大小提示的间隔符,否则内容不会扩展。但是,如果MyWidget使用 a QVBoxLayout,则其中的任何QWidgets内容都会正确扩展。
| 归档时间: |
|
| 查看次数: |
12352 次 |
| 最近记录: |