【问题标题】:QWidget findChildren when objectname contains a specific string对象名包含特定字符串时的QWidget findChildren
【发布时间】:2018-05-10 12:03:08
【问题描述】:

如何列出 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”的子项的列表。谢谢!

【问题讨论】:

  • 是的,但是我可以使用什么正则表达式或模式来获取所有包含特定字符串(“name”或“id”)的正则表达式或模式?

标签: c++ qt find qwidget


【解决方案1】:

有一个像这样的简单函数:

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

给定一个QWidget * widget,你可以这样称呼它:

auto name_list = widgets(widget, "name");
auto id_list = widgets(widget, "id");

【讨论】:

  • 注意这个重载函数 === findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const ==== 是在 Qt 5.0 中引入的。
【解决方案2】:

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();
    }
}

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多