2015-01-17 5 views
0

Можно ли сделать MyObject всегда равным (один и тот же экземпляр) во всех его определениях qml?Qt QML C++ Plugin Singleton

C++:

class MyObject : public QObject { 
     Q_OBJECT 
     Q_DISABLE_COPY(MyObject) 

     Q_PROPERTY(QString test READ test NOTIFY testChanged) 
    public: 
     explicit MyObject(QObject *parent = 0); 

    signals: 
     void testChanged(); 

    private: 
     QString test() const { 
      return _test; 
     } 

     QString _test; 
}; 

QML:

Item { 
    MyObject { id: myObject1 } 
    MyObject { id: myObject2 } 
} 

Я хочу myObject1 быть равным myObject2. Какой-то одноэлементный (но нет qmlRegisterSingletonType)

+0

Как могут быть два разных объекта? Что именно вы хотите сделать? Если вам нужно какое-то сравнение, вы можете использовать одно и то же 'objectName' для обоих этих объектов – folibis

ответ

0

Я могу интерпретировать ваш вопрос так, как будто вы хотите, чтобы более чем одна запись MyObject в QML-коде относится к одному и тому же объекту C++. Вы также знаете, что такое синглтон. Как насчет обертки над синглтоном, что вы можете использовать с QML нравится:

class MyObject : public QObject { 
     Q_OBJECT 
     Q_DISABLE_COPY(MyObject) 

     Q_PROPERTY(QString test READ test NOTIFY testChanged) 
    public: 
     explicit MyObject(QObject *parent = 0); 

    signals: 
     void testChanged(); 

    private: 
     QString test() const { 
      return MySingleton::instance().test(); 
     } 

     // QString _test; // this supposed to be implemented in MySingleton 
}; 

Или я в моем приложении для многих различных типов связи между C++ и QML использовать какое-то из ОБЪЯВЛЕНИЯ статьи Exposing Attributes of C++ Types to QML. Это еще удобнее, учитывая многие виды использования.