从C ++访问QML的LayoutMirroring附加属性

时间:2011-12-21 21:16:36

标签: c++ qt qml

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

有可能吗?

2 个答案:

答案 0 :(得分:2)

从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)

答案 1 :(得分:0)

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();

    return app->exec();
}