Qt C++ - 访问动态创建的 Widget (QLineEdit)

Qt C++ - access a dynamically created Widget (QLineEdit)

我正在制作一个应用程序,其中几乎所有 UI 元素都是动态创建的...其中有一个 QLineEdit + QPushButton 对的列表,该对是根据用户的数字生成的输入。按钮打开 Dialog window 来查找文件,QLineEdits 用于数据 verification/editing,所有这些都必须在数据库中结束。有时他只需要输入 3 个值,有时是 10 个。

QLineEdit* warstwaEdit[iloscWarstw]; //iloscWarstw - number user inputs
QPushButton* warstwaDialog[iloscWarstw];
for(int i=0; i<iloscWarstw; i++) {
    warstwaEdit[i] = new QLineEdit;
    warstwaEdit[i]->setFixedHeight(25);
    warstwaEdit[i]->setFixedWidth(400);
    ui->scrollAreaWidgetContentsFormularzWarstw->layout()->addWidget(warstwaEdit[i]);

    warstwaDialog[i] = new QPushButton;
    warstwaDialog[i]->setFixedWidth(100);
    warstwaDialog[i]->setFixedHeight(30);
    warstwaDialog[i]->setText("Dodaj element");
    ui->scrollAreaWidgetContentsFormularzWarstw->layout()->addWidget(warstwaDialog[i]);
    mapperDialog->setMapping(warstwaDialog[i], i); 
    connect(warstwaDialog[i], SIGNAL(clicked()), mapperDialog, SLOT(map()));
}

但我无法让对话框将字符串传递给 "his" 标签。在 Dialog 的插槽中,我正在尝试使用

ui->scrollAreaWidgetContentsFormularzWarstw->layout()->warstwaEdit[i]->setText(filepath);

但显然 QLayout ()(也 scrollAreaWidgetContentsFormularzWarstw)有一个成员 "warstwaEdit"。 qDebug() 在该插槽中使用表示正在传递正确的 i。 TreeDump 表示 ScrollAreaWidgetContentsFormularzWarstw 是父级。

我有点不知所措。我第一次接触 Qt 时得到了一个非常奇怪的应用程序...

您用来访问小部件的语法似乎不正确。

由于您将小部件存储在一个数组中,因此您实际上不需要通过布局访问它们。直接在您的阵列上访问它们:

warstwaEdit[i]->setText(filepath);

另一种方法是命名您的小部件:

warstwaEdit[i]->setObjectName("some name");

然后使用 find 访问它们:

QLineEdit* lineEdit = ui->scrollAreaWidgetContentsFormularzWarstw->findChild<QLineEdit*>("some name");
lineEdit->setText(filePath);