我正在制作一个应用程序,其中几乎所有的 UI 元素都是动态创建的......其中有一个 QLineEdit
+ QPushButton
对的列表,这些对是从用户的数字生成的输入。按钮打开一个 Dialog
窗口来查找文件,QLineEdits
用于数据验证/编辑,所有这些都必须在数据库中结束。有时他只需要输入 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()));
}
但我无法让对话框将字符串传递给“他的”标签。在 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);
关于c++ - Qt C++ - 访问动态创建的 Widget (QLineEdit),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29819370/