如何在我的 Qdialogbox 的 linedits 中填充值?
how to populate values in my Qdialogbox's linedits?
在我的主 window 中,我有一个名为 employee_list
的 QlistWidget
,这个 QListWidget
中的项目是这样的:
<FIRM-1> name="Anna Ken" age="25" job="QtMaster" ,
<FIRM-2> name="Sir Ron" age="50" job="QtSlave"
因此,当我单击 employee_list
QlistWidget
中的项目时,dialogbox
会显示 3 个字段 name,age,job
,如下所示
但是当这个对话框出现时,我想要填充字段 name,age,job
,像这样,我怎样才能做到这一点?
到目前为止我已经试过了。
void MainWindow::on_employee_list_itemDoubleClicked(QListWidgetItem* item)
{
QString test = item->text(); // getting the item text
std::string test_s = test.toStdString(); //converting it to string from Qstring
string name_part = ""; //creating a variable in which name will be stored
int name_pos = test_s.find("name=\"");
for (int i = name_pos + 6; i < test_s.length();i++)
{
if (test_s[i] != '\"')
name_part += test_s[i];
else
break; //extracting name in the item's text, after this the name_part variable value is Sir ron. // similar code for extarcting age and job.
if (test_s.find("<FIRM-1>") != std::string::npos) //if item contains text <FIRM-1> then show this dialogue
{
GrpComd grpComd; //creating instance of dialog
grpComd.exec(); //showing it
grpComd.name_lineedit->settext(name_part); // i tried this to populate name in name_linedit but getting error , access violation reading location
}
}
由于我们看不到 GrpComd
的代码,我们无法知道您是否初始化了该指针。或者即使它是 public
成员。
无论如何,您应该在调用对话框 exec()
之前设置文本。 QLineEdit
的方法是 setText
而不是“settext”——注意大写 'T'
你必须填写然后显示,即 setText()
然后是 show()
或 exec()
:
if (test_s.find("<FIRM-1>") != std::string::npos)
{
GrpComd grpComd;
grpComd.setName(clickedName);
grpComd.setJob(clickedJob);
grpComd.setAge(clickedAge);
grpComd.exec();
}
甚至更好,如果尚未定义,则使用这些字段创建一个构造函数。
GrpComd::GrpComd(const QString& name,const QString& job, uint age);
在我的主 window 中,我有一个名为 employee_list
的 QlistWidget
,这个 QListWidget
中的项目是这样的:
<FIRM-1> name="Anna Ken" age="25" job="QtMaster" ,
<FIRM-2> name="Sir Ron" age="50" job="QtSlave"
因此,当我单击 employee_list
QlistWidget
中的项目时,dialogbox
会显示 3 个字段 name,age,job
,如下所示
但是当这个对话框出现时,我想要填充字段 name,age,job
,像这样,我怎样才能做到这一点?
到目前为止我已经试过了。
void MainWindow::on_employee_list_itemDoubleClicked(QListWidgetItem* item)
{
QString test = item->text(); // getting the item text
std::string test_s = test.toStdString(); //converting it to string from Qstring
string name_part = ""; //creating a variable in which name will be stored
int name_pos = test_s.find("name=\"");
for (int i = name_pos + 6; i < test_s.length();i++)
{
if (test_s[i] != '\"')
name_part += test_s[i];
else
break; //extracting name in the item's text, after this the name_part variable value is Sir ron. // similar code for extarcting age and job.
if (test_s.find("<FIRM-1>") != std::string::npos) //if item contains text <FIRM-1> then show this dialogue
{
GrpComd grpComd; //creating instance of dialog
grpComd.exec(); //showing it
grpComd.name_lineedit->settext(name_part); // i tried this to populate name in name_linedit but getting error , access violation reading location
}
}
由于我们看不到 GrpComd
的代码,我们无法知道您是否初始化了该指针。或者即使它是 public
成员。
无论如何,您应该在调用对话框 exec()
之前设置文本。 QLineEdit
的方法是 setText
而不是“settext”——注意大写 'T'
你必须填写然后显示,即 setText()
然后是 show()
或 exec()
:
if (test_s.find("<FIRM-1>") != std::string::npos)
{
GrpComd grpComd;
grpComd.setName(clickedName);
grpComd.setJob(clickedJob);
grpComd.setAge(clickedAge);
grpComd.exec();
}
甚至更好,如果尚未定义,则使用这些字段创建一个构造函数。
GrpComd::GrpComd(const QString& name,const QString& job, uint age);