问题描述
我需要检索文本在用户表单上显示的顺序。我正在尝试如下:
QString line = "QLineEdit";
QString combo = "QComboBox";
QList<QWidget *> childWidgets = ui->frame_3->findChildren<QWidget *>();
QStringList data;
for(auto widget : childWidgets){
if(widget->metaObject()->className() == line || widget->metaObject()->className() == combo){
data.append(widget->text()); //append the text of the lineEdits and ComboBoxes to data
}
}
我从上面的代码中收到以下编译错误:
”在QWidget中没有名为“文本”的成员
解决方法
由于您指出了QWidget基类没有文本成员函数,因此需要直接访问QComboBox和QLineEdit才能获取当前文本。
QList<QWidget *> childWidgets = ui->frame_3->findChildren<QWidget *>();
QStringList data;
for(auto widget : childWidgets){
auto combo = dynamic_cast<QComboBox*>(widget);
if (combo) {
data << combo->currentText(); // currentText() returns the text from the combobox
}
else {
auto lineEdit = dynamic_cast<QLineEdit*>(widget);
if (lineEdit) {
data << lineEdit->text(); // A line edit has a text() member.
}
}
}
此代码不处理订购。我相信顺序与添加到父级的顺序相同。