避免QVBoxLayout中的Widgets重叠
问题描述:
我试图动态添加更多的字段来选择我的应用程序中的多个路径。 Unfortunaley我无法摆脱的重叠,有些图标有:避免QVBoxLayout中的Widgets重叠
我将它们添加下面的代码:
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
,定义为“主控件的最小尺寸设置为minimumSize(),,除非控件已经具有最小尺寸”。
您的顶层布局(对话框)具有默认的大小限制(在.ui文件中),并且您为对话框设置了最小大小(在.ui文件中),因此约束无效在所有。
要解决您的问题,您必须删除对话框的最小尺寸(例如选择.ui编辑器的属性值并单击向后箭头),或将顶层布局的尺寸约束设置为QLayout::SetMinimumSize
。
+0
谢谢!我不明白我需要设置此属性的布局。但现在很明显。 – minils
这通常意味着布局约束不能正确地向上推到层次结构直到对话框。你能为你的问题创建一个最小的工作示例吗? – E4z9
@ E4z9你可以在这里找到整个源代码(https://github.com/minils/EasySlideshow)。 – minils
作为一个方面的评论,你应该通过使用lambdas/C++ 11摆脱'findChildren(“browseButton”)等等:在addPathEdit中执行'connect(browseButton,&QPushButton :: clicked,lineEdit ,[this,lineEdit](){this-> on_browse_button_clicked(lineEdit);})'并更改“slot”以获得行编辑参数:'void SettingsDialog :: on_browse_button_clicked(QLineEdit * lineEdit)' –
E4z9