Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt C++;-访问动态创建的小部件(QLineEdit)_C++_Qt_Widget - Fatal编程技术网

C++ Qt C++;-访问动态创建的小部件(QLineEdit)

C++ Qt C++;-访问动态创建的小部件(QLineEdit),c++,qt,widget,C++,Qt,Widget,我正在制作一个几乎所有UI元素都是动态创建的应用程序。。。其中包括由用户输入的数字生成的QLineEdit+QPushButton对列表。按钮打开一个对话框窗口来查找文件,QLineEdits用于数据验证/编辑,以及所有必须在数据库中完成的操作。有时他只需要输入3个值,有时输入10个值 QLineEdit* warstwaEdit[iloscWarstw]; //iloscWarstw - number user inputs QPushButton* warstwaDialog[iloscWa

我正在制作一个几乎所有UI元素都是动态创建的应用程序。。。其中包括由用户输入的数字生成的
QLineEdit
+
QPushButton
对列表。按钮打开一个
对话框
窗口来查找文件,
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()));
}
但是显然
QLayout(
)(也不是
scrollAreaWidgetContentsFormularzWarstw
)有一个成员“warstwaEdit”<该插槽中使用的code>qDebug()表示正在传递正确的
i
。TreeDump表示
ScrollAreaWidgetContentsFormularzWarstw
是父级


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

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

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

warstwaEdit[i]->setText(filepath);
另一种方法是命名您的小部件:

warstwaEdit[i]->setObjectName("some name");
然后使用
查找
访问它们:

QLineEdit* lineEdit = ui->scrollAreaWidgetContentsFormularzWarstw->findChild<QLineEdit*>("some name");
lineEdit->setText(filePath);
QLineEdit*lineEdit=ui->scrollAreaWidgetContentsFormularzWarstw->findChild(“一些名字”);
lineEdit->setText(文件路径);

Bingo!替代方案奏效了。我将“I”转换为字符串,并将其添加到包含“warstwaEdit”的字符串中i'被传递到对话框槽并在那里转换为字符串,我使用了findChild(“warstwaEdit”+number)。谢谢我应该能够从这一点顺利完成应用程序,但不要使用findChild,只要在创建小部件时存储指针就行了!
QLineEdit* lineEdit = ui->scrollAreaWidgetContentsFormularzWarstw->findChild<QLineEdit*>("some name");
lineEdit->setText(filePath);