搜索
您的当前位置:首页Qt 获取UI子控件的通用方法

Qt 获取UI子控件的通用方法

来源:爱问旅游网

对于这种界面,要对label一个个设置

你是不是还在写这种代码呢?

我今天学到一种通用方法,在此记录一下

简单两行代码搞定,findChild源码如下(该方法应定义在一个通用类中):

    template<typename T>
    inline T findChild(const QString &aName = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
    {
        // 定义一个名为 ObjType 的新类型,该类型是模板参数 T 经过去除指针和 const / volatile 修饰符后的结果
        typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type ObjType;
        return static_cast<T>(qt_qFindChild_helper(this, aName, ObjType::staticMetaObject, options));
    }

    template<typename T>
    inline QList<T> findChildren(const QString &aName = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
    {
        typedef typename QtPrivate::remove_cv<typename QtPrivate::remove_pointer<T>::type>::type ObjType;
        QList<T> list;
        qt_qFindChildren_helper(this, aName, ObjType::staticMetaObject,
                                reinterpret_cast<QList<void *> *>(&list), options);
        return list;
    }

其中,qt_qFindChild_helper 和 qt_qFindChildren_helper 为Qt 框架中的内部函数,用于在对象的子对象中查找特定名称的对象,它们在类外声明

Q_CORE_EXPORT void qt_qFindChildren_helper(const QObject *parent, const QRegularExpression &re,
                                           const QMetaObject &mo, QList<void *> *list, Qt::FindChildOptions options);
Q_CORE_EXPORT QObject *qt_qFindChild_helper(const QObject *parent, const QString &name, const QMetaObject &mo, Qt::FindChildOptions options);

此外,也可以根据不同的规则写类似的接口

因篇幅问题不能全部显示,请点此查看更多更全内容

Top