QT5 C ++,有没有办法我可以在qlist容器中获取小部件的当前文本

问题描述

我需要检索文本在用户表单上显示的顺序。我正在尝试如下:

    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.
        }
    }
}

此代码不处理订购。我相信顺序与添加到父级的顺序相同。