首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何侦听QQuickItem childItem添加

如何侦听QQuickItem childItem添加
EN

Stack Overflow用户
提问于 2018-02-16 18:59:23
回答 2查看 633关注 0票数 1

我已经创建了带有qml附加属性的c++类,以便在QML中使用它。

现在,我想将附加属性添加到一个QQuickItem对象,并将此附加属性传播到所有QQuickItem子项(由QQuickItem::childItems()返回的子项,而不是由QObject::children()返回的子项)。我可以很容易地遍历现有的QQuickItem子项并向它们添加附加属性,但是我不知道如何侦听某些QQuickItem的添加/删除子项。没有信号,没有事件,只有重写QQuickItem::itemChange()方法。

如何监听添加/删除QQuickItem项的子项?我只找到了QQuickItemChangeListener,但这个类来自于私有API。

UPD1: attached属性的实现:

代码语言:javascript
复制
class MyProp : public QObject {
    Q_OBJECT
    Q_PROPERTY(int prop ...)
    public:
        explicit MyProp(QObject * object = nullptr) : QObject(object) {
            auto item = qobject_cast<QQuickItem *>(object);
            if(item) {
                for(auto child : _item->childItems()) {
                    QObject * attached = qmlAttachedPropertiesObject<MyProp>(child, true);
                    ... // needs to listen here for adding/removing child items
                }
            }
        }

        static MyProp * qmlAttachedProperties(QObject * object) {
            return new MyProp(object);
        }
}

QML_DECLARE_TYPEINFO(MyProp, QML_HAS_ATTACHED_PROPERTIES)
EN

回答 2

Stack Overflow用户

发布于 2018-02-16 19:34:29

使用QML,您可以拥有Item属性datachildrenresources

子项属性包含该项的可视子项的列表。resources属性包含要按名称引用的非可视资源。

..。默认数据属性将根据需要自动将子对象分配子对象和资源属性。

当您添加一些Item作为对象的子级时:

myItem->setParentItem(parentQQuickItem);

您可以监听QML代码中的更改:

代码语言:javascript
复制
MyParentItem
{
    onDataChanged:
    {
        // Parse children and modify them
    }
}

或者仅对可视项使用onChildrenChanged,或仅对非可视项使用onResourcesChanged

票数 0
EN

Stack Overflow用户

发布于 2021-07-18 23:42:53

不幸的是,目前还没有办法做到这一点。你可以投票支持并观看这个建议,当它被实施时会收到通知:

https://bugreports.qt.io/browse/QTBUG-74320

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48825319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档