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

时间:2015-04-23 09:33:18

标签: c++ qt widget

我正在创建一个应用程序,其中几乎所有UI元素都是动态创建的...其中包含从用户输入的数字生成的QPushButton + Dialog对的列表。按钮打开QLineEdits窗口以查找文件,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())); } 用于数据验证/编辑,所有这些都必须在数据库中结束。有时他只需要输入3个值,有时候是10.

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

但我无法让Dialog将String传递给“他的”标签。在Dialog的插槽中,我正在尝试使用

QLayout (

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

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

1 个答案:

答案 0 :(得分:7)

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

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

warstwaEdit[i]->setText(filepath);

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

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

然后使用find

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