c++ - 在 C++ 中与 Repeater 中的委托(delegate) QML 组件交互

标签 c++ qt qml repeater qqmlcomponent

我无法从 C++ 访问 Repeater 中的委托(delegate) QML 组件。请在下面找到代码。谢谢。

main.cpp

#include <QApplication>
#include <QDebug>
#include <QQuickView>
#include <QQuickItem>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QQuickView view;
    view.setSource(QUrl(QStringLiteral("qrc:/Main.qml")));
    view.show();
    QQuickItem *object = view.rootObject();
    QObject *rectangle = object->findChild<QObject*>("rect1");

    if (!rectangle)
    qDebug() << "MyError: rectangle was not found";

    app.exec();
}

主.qml

import QtQuick 2.4

Row {
    Repeater {
        model: 3
        Rectangle {
            width: 50; height: 50
            color: index %2 ? "black" : "white"
            objectName: "rect" + index
        }
    }
}

控制台输出:

MyError: rectangle was not found

最佳答案

我已经在 C++ 中实现了自己的递归函数模板“findChild”函数。`

template <class T>
SearchType findChild(QQuickItem* object, const QString& objectName)
{
        QList<QQuickItem*> children = object->childItems();
        foreach (QQuickItem* item, children)
        {
            if (QQmlProperty::read(item, "objectName").toString() == objectName)
                return item;

            T child = findChild<QQuickItem*>(item, objectName);

            if (child)
                return child;
    }
    return nullptr;
}

并将其称为默认函数。

QQuickItem *object = view.rootObject();
QQuickItem *rectangle = findChild<QQuickItem*>(object, "rect1");

if (rectangle)
{
    qDebug() << rectangle;
    qDebug() << rectangle->objectName();
} 

并得到输出:

QQuickRectangle(0x2222b40, name="rect1", parent=0x22245b0, geometry=50,0 50x50)
"rect1"

关于c++ - 在 C++ 中与 Repeater 中的委托(delegate) QML 组件交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134446/

相关文章:

c++ - GCC 不链接库。它编译,但生成的库缺少必要的引用

c++ - 设置 QT_DEBUG_PLUGINS 失败

qt - 处理 QQuickItem 上的鼠标事件

c++ - Q按钮 : How to know whether a "released" signal will be followed by a "clicked" signal?

C++构造函数问题

c++ - 自定义 Qobject 的 MovetoThread 问题

c++ - 通过 C++ 单击按钮后更新 QML TableView

qt - QML Column 不会自动设置子对象宽度

c++ - 我的 QSqlQueryModel 不在 ListView 中显示数据

c++ - 在类函数中使用对象