C++ QQuickItem:如何在项目大小更改时触发函数

Posted

技术标签:

【中文标题】C++ QQuickItem:如何在项目大小更改时触发函数【英文标题】:C++ QQuickItem: How to trigger a function on item size change 【发布时间】:2018-04-05 08:36:34 【问题描述】:

我有一个 C++ 中的 QQuickItem,它在 QML 应用程序中实例化。如果我的 QQuickItem 的 width 属性发生变化,我想在 c++ 端触发一个自定义函数。

在 QML 中我会做 onWidthChanged: my code。如何在 c++ 端做到这一点?

【问题讨论】:

我编辑了标题,因为混合窗口和项目有点令人困惑,而您似乎只对项目的大小变化感兴趣。 【参考方案1】:

如果您想响应自定义 QQuickItem 中的大小更改,请重新实现 geometryChanged() 函数。这样做的好处是不会为每个项目创建额外的 signal-slot connections,如果您要连接到 widthChanged()/heightChanged() 信号,这将是必要的。

Here 是在 Qt Quick Controls 2 中重新实现的一个示例。

【讨论】:

【参考方案2】:

width 是具有widthChanged 信号的qproperty,因此您可以将该信号连接到某个插槽。

class FooItem : public QQuickItem

    Q_OBJECT
public:
    FooItem(QQuickItem *parent=Q_NULLPTR): QQuickItem(parent)
        connect(this, &FooItem::widthChanged, this, &FooItem::onWidthChanged);
    
    Q_SLOT void onWidthChanged()
        qDebug()<<width();
    
;

类似地,heightxyz 等其他属性。

【讨论】:

以上是关于C++ QQuickItem:如何在项目大小更改时触发函数的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用 QQuickItem::stackBefore() 重新排序 GridLayout 中的项目?

如何将 X 和 Y 转换值应用于 C++ 端的 QQuickItem

如何在 C++ 端获取有效的 QQuickItem 实例

如何在 C++ 端获取 QQuickItem 的 C++ 对象实例 [重复]

如何创建 QQuickItem 的单独副本并将其呈现在不同的窗口上

如何在 Qt Quick 中将 QML 项目转换为相应的 C++ 项目