QWidget findChildren, когда имя объекта содержит определенную строку - PullRequest
0 голосов
/ 10 мая 2018

Как вы перечисляете все дочерние элементы из qwidget, которые содержат определенную строку внутри de objectname?

Например, если у меня есть:

 "general_widget", with children:
    "label_name_1"
    "label__1"
    "label_name_2"
    "label_id_2"
    "label_name_3"
    "label_id_3"
    "label_name_4"
    "label_id_4"

Я хотел бы получить список всех дочерних элементов, которые содержат «name» как часть objectName, и другой список со всеми дочерними элементами, которые содержат «id». Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Используйте findChildren() вместе с objectName().contains(), например:

QList<QWidget*> subwidgets = this->findChildren<QWidget*>();
QListIterator<QWidget*> it(subwidgets); // iterate through the list of widgets
QWidget *awiget;

while (it.hasNext()) {
    awiget = it.next(); // take each widget in the list
    if (awiget->objectName().contains("name")){
        qDebug() << awiget->objectName();
    }
}
0 голосов
/ 10 мая 2018

Иметь такую ​​простую функцию:

QList<QWidget> widgets(QWidget * parent, QString search)
{
    QRegularExpression exp(search);
    return parent->findChildren<QWidget>(exp);
}

и с учетом QWidget * widget вы можете назвать это так:

QList<QWidget> name_list = widgets(widget, "name");
QList<QWidget> id_list = widgets(widget, "id");
...