从C++访问 QML 的布局镜像附加属性

Accessing QML's LayoutMirroring attached property from C++

本文关键字:镜像 属性 布局 C++ 访问 QML      更新时间:2023-10-16

LayoutMirroring QML 附加属性允许将项目的方向性从左到右切换到从右到左,反之亦然。我想从C++代码中访问项目的当前LayoutMirroring值,从而扩展 QML 应用程序。我知道 qmlAttachedPropertiesObject 函数可用于从C++访问附加属性,如文档中所述,但我不知道在哪里可以找到表示此特定属性的类 C++。

有可能做到吗?

从 Qt5 开始,可以使用 QQmlProperty 类轻松读取和写入附加属性。

简单main.qml文件:

import QtQuick 2.0
Rectangle {
    LayoutMirroring.enabled: true
    LayoutMirroring.childrenInherit: true
}

要阅读上面的简单C++代码LayoutMirroring.enabled附加属性:

QQuickView view;
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view.show();
QQuickItem* rootItem = view.rootObject();
qDebug() << QQmlProperty::read(rootItem, "LayoutMirroring.enabled", qmlContext(rootItem));

控制台输出:

=> QVariant(bool, true)
import QtQuick 1.1
Rectangle {
id: parentRect
property alias layoutValue : LayoutMirroring.enabled// ? true : false;// Read Only
LayoutMirroring.enabled: false
LayoutMirroring.childrenInherit: true
width: 300; height: 50
color: "yellow"
border.width: 1
Row {
    anchors { left: parent.left; margins: 5 }
    y: 5; spacing: 5
    Repeater {
        model: 5
        Rectangle {
            color: "red"
            opacity: (5 - index) / 5
            width: 40; height: 40
            Text {
                text: index + 1
                anchors.centerIn: parent
            }
        }
    }
}
}
#include#include#include#include#include "qmlapplicationviewer.h"Q_DECL_EXPORT int main(int argc, char *argv[]({    QScopedPointer app(createApplication(argc, argv((;    QScopedPointer viewer(QmlApplicationViewer::create(((;    viewer->setOrientation(QmlApplicationViewer::ScreenOrientationAuto(;    viewer->setMainQmlFile(QLatin1String("qml/Test/main.qml"((;    QDeclarativeProperty propLayout(viewer->rootObject((,"layoutValue"(;    QDeclarativeProperty propLayoutMargin(viewer->rootObject((,"anchors.leftMargin"(;    qDebug(( showExpanded((;    返回 app->exec((;}