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

标签 c++ qt widget

我正在制作一个应用程序,其中几乎所有的 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/

相关文章:

c++ - 类型 'double' 和 'int' 到二进制 'operator%' 的无效操作数

c++ - "reserved for any use"是什么意思?

c++ - 如何使此函数使用 getline 读取字符串并使其与 int 的行为相同?

c++ - Qt - qstring.h 包含字符串错误

angularjs - 如何使用包裹在 CKEditor 小部件中的 Angular 指令

android - 这个安卓小部件是什么?

c++ - 您能为嵌入式系统推荐哪种免费的最小闪存文件系统?

c++ - 烦人的错误消息 : cannot merge previous GCDA file

c++ - 使用 C++ 处理 zip 存档

javascript - 网页中的经典富文本格式