Я попытался динамически добавлять дополнительные поля для выбора нескольких путей в моем приложении. Unfortunaley Я не в состоянии избавиться от дублирования, что некоторые значки имеют:Избегайте перекрытия виджетов в QVBoxLayout
добавить их с помощью следующего кода:
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.
Любая помощь приветствуется.
Обычно это означает, что ограничения компоновки неправильно сдвинули иерархию до диалога. Не могли бы вы создать минимальный рабочий пример вашей проблемы? – E4z9
@ E4z9 Вы можете найти весь исходный код [здесь] (https://github.com/minils/EasySlideshow). – minils
как побочный комментарий, вы должны избавиться от 'findChildren (" browseButton ")' et al, используя lambdas/C++ 11: В addPathEdit do 'connect (browseButton, & QPushButton :: clicked, lineEdit , [this, lineEdit]() {this-> on_browse_button_clicked (lineEdit);}) 'и измените« слот », чтобы получить редактирование строки в качестве аргумента:' void SettingsDialog :: on_browse_button_clicked (QLineEdit * lineEdit) ' –
E4z9