避免在QVBoxLayout中重叠Widgets

时间:2016-12-18 00:17:16

标签: qt qwidget overlapping qvboxlayout

我尝试动态添加更多字段以在我的应用程序中选择多个路径。不幸的是,我无法摆脱某些图标的重叠:

enter image description here

我使用以下代码添加它们:

void SettingsDialog::addPathEdit(QString dir)
{
    if (amountPaths > maxAmountPaths) {
        showError(tr("Cannot add more than %1 paths").arg(maxAmountPaths));
        return;
    }
    QHBoxLayout *hLayout = new QHBoxLayout();
    hLayout->setObjectName("pathLine");
    hLayout->setSizeConstraint(QHBoxLayout::SetMinimumSize);

    QLineEdit *lineEdit = new QLineEdit(dir);
    lineEdit->setMinimumHeight(25);
    lineEdit->setObjectName("path");
    hLayout->addWidget(lineEdit);

    QPushButton *browseButton = new QPushButton(tr("Browse..."));
    browseButton->setMinimumHeight(25);
    browseButton->setObjectName("browseButton");
    hLayout->addWidget(browseButton);
    connect(browseButton, SIGNAL(clicked()), this, SLOT(on_browse_button_clicked()));

    ui->pathHolderLayout->addLayout(hLayout);
    amountPaths++;
}

其中pathHolderLayout是QVBoxLayout。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

Qt中的布局有一个" size constraint"它定义了布局的minimumSize / maximumSize / sizeHint,具体取决于其内容的minimumSize / maximumSize / sizeHint。

默认大小约束为QLayout::SetDefaultConstraint,定义为"主要小部件的最小大小设置为minimumSize(),除非小部件已具有最小大小"

您的顶级布局(对话框)具有默认大小约束(在.ui文件中),并且您为对话框设置了最小大小(在.ui文件中),因此约束在所有

要解决您的问题,您必须删除对话框的最小大小(例如,选择.ui编辑器的属性值并单击后退箭头),或者将顶级布局的大小限制设置为{{ 1}}。