避免 QVBoxLayout 中的 Widgets 重叠

Avoid overlapping of Widgets in QVBoxLayout

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

我用下面的代码添加它们:

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。

感谢任何帮助。

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

默认大小约束为QLayout::SetDefaultConstraint,定义为"The main widget's minimum size is set to minimumSize(), unless the widget already has a minimum size."

您的(对话框的)顶级布局具有默认大小限制(在 .ui 文件中),并且您为对话框设置了最小大小(在 .ui文件),因此约束实际上什么都不做。

要解决您的问题,您要么必须删除对话框的最小尺寸(例如 select .ui 编辑器的 属性 的值,然后单击后退箭头),或者将顶层布局的大小约束设置为QLayout::SetMinimumSize.