像设计师那样从应用程序编辑QML属性

时间:2013-08-02 14:46:08

标签: qt qml qt5 qt-quick

我的应用程序提供了在运行时编辑某些QML对象属性的可能性。 是否有可能像Qt设计师那样显示QML属性进行编辑?

例如,我有QML文件

import QtQuick 2.0

Rectangle {
id: circle
color: "red"
border.color: "black"
border.width: 1

/* allow to modificate by user */

opacity: 0.5
width: 16
height: 16
radius: width*0.5
}

创建之后,我想允许运行时用户更改其部分属性。 是否可以使用Qt设计器类/插件/任何东西来显示其属性并允许编辑它们?

我不想重新发明轮子。 :)

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码

在CPP中获取QML项目指针

QQuickItem * item = engine.rootObjects()。first() - > findChild(" objectNameHere");

然后,您可以使用以下代码遍历其属性

for(int i=0;i<item->metaObject()->propertyCount();++i) {
    // Here you can get the name of the property like
    qDebug() << "Name" << item->metaObject()->property(i).name();
    // Here you can get the type name of the property like
    qDebug() << "Name" << item->metaObject()->property(i).typeName();
    // Here you can check if it's a double type for example, and get the value and, set the value to ZERO again for example
    if(item->metaObject()->property(i).type() == QVariant::DOUBLE) {
    // Get the value
    qDebug() << "Value" << item->property(item->metaObject()->property(i).name()).toDouble();
    // Set the value to ZERO
    item->setProperty(item->metaObject()->property(i).name(), 0.0);    
}

在几分钟内,您可以创建一个通用的UI,让我们用这种方法修改任何对象的属性,我想