2012-07-30 472 views
2

QML/Javascript中如何使用QVector? 实施例:QML/Javascript中的QVector

C++:我在QML使用

自定义类。该类包括注册ElementType

class CustomType : public QObject 
{ 
    Q_OBJECT 

    public: 
     Q_INVOKABLE QVector<ElementType*> getElements(); 
    //.....    
} 
//......... 
qmlRegisterType<CustomType>("CustomComponents", 1, 0, "CustomType"); 
qmlRegisterType<ElementType>("CustomComponents", 1, 0, "ElementType"); 
qRegisterMetaType<ElementType*>("ElementType*"); 

QML的返回QVector功能:

QML代码接收实例CustomType类(自定义),并尝试获取元素QVector<ElementType*>并读取其属性。但QML无法识别QVector类型。

//....... 
function(){ 
    var elements = custom.getElements() 
    elements[0].property //? 
} 

回答

1

QML访问的列表属性需要与QDeclarativeListProperty构造。这适用于列表形状的所有东西,也是矢量。 This part of the Qt documentation有详细信息。

+0

这不完全是我所需要的。 我已添加: qRegisterMetaType >(“QVector ”); 在QML中,我收到此类型:QVariant(QVector ) 那么,如何访问QVariant内部? – Svicer 2012-07-31 13:22:29

0

在你的例子中,你只需要从Q_INVOKABLE函数返回QListQObject*。请注意,以这种方式返回的所有对象都具有JavaScript所有权,并且在您的JavaScript函数返回时将被垃圾收集。为了防止这种行为,请在将对象推入QList集合之前使用setObjectOwnership。 有关在QML中使用集合的更多信息,请参阅QML Data Models

+0

QList适用于ListModel,但在我的情况下,我收到QVariant类型的元素(QList ),并且我无法访问QList的内部类型 Svicer 2012-08-02 12:06:45

+0

您是否试图从QObjectList继承并在你自己的类中添加一些带索引参数的存取方法? – 2012-08-09 14:58:11