Sono nuovo nella codifica in QML e sto provando a scrivere la mia prima app del sistema operativo Sailfish. Per il backend ho creato una classe C++. Tuttavia, voglio istanziare un oggetto di quella classe C++ e usarlo sia nella copertina che nella pagina principale (due file QML separati), così posso lavorare con gli stessi dati, memorizzati in quella classe. Come indirizzare lo stesso oggetto nei file QML separati?Condividere un oggetto tra file QML
5
A
risposta
7
È possibile rendere l'oggetto disponibili nel contesto QtQuick:
class MySharedObject : public QObject {
Q_OBJECT
public:
MySharedObject(QObject * p = 0) : QObject(p) {}
public slots:
QString mySharedSlot() { return "blablabla"; }
};
in main.cpp
MySharedObject obj;
view.rootContext()->setContextProperty("sharedObject", &obj);
e da qualsiasi luogo in QML:
console.log(sharedObject.mySharedSlot())
se si don' Se vuoi che sia "globale" in QML, puoi incassarlo un po ', basta creare un altro derivato QObject
ed classe, registrarlo per istanziare in QML e avere una proprietà in esso che restituisce un puntatore a quell'istanza dell'oggetto, in questo modo sarà disponibile solo dove istanziate l'oggetto QML "accessor".
class SharedObjAccessor : public QObject {
Q_OBJECT
Q_PROPERTY(MySharedObject * sharedObject READ sharedObject)
public:
SharedObjAccessor(QObject * p = 0) : QObject(p) {}
MySharedObject * sharedObject() { return _obj; }
static void setSharedObject(MySharedObject * obj) { _obj = obj; }
private:
static MySharedObject * _obj; // remember to init in the cpp file
};
in main.cpp
MySharedObject obj;
qRegisterMetaType<MySharedObject*>();
SharedObjAccessor::setSharedObject(&obj);
qmlRegisterType<SharedObjAccessor>("Test", 1, 0, "SharedObjAccessor");
e in QML
import Test 1.0
...
SharedObjAccessor {
id: acc
}
...
console.log(acc.sharedObject.mySharedSlot())
Problemi correlati
- 1. Come condividere i dati tra file javascript?
- 2. Come condividere file tra repository git?
- 3. Come condividere un controller NSArray tra due file pennino?
- 4. Condividere un modello tra più file edmx (Entity Framework 4.0)
- 5. È possibile condividere un file ResourceDictionary tra più progetti?
- 6. Come condividere un UIManagedDocument tra oggetti diversi?
- 7. QML: navigazione tra le pagine qml dalla percezione del progetto
- 8. Qual è un buon modo per condividere un oggetto tra le classi?
- 9. Qt5. Incorpora oggetto QWidget in QML
- 10. Come condividere l'oggetto tra le applicazioni java?
- 11. dichiarare la proprietà globale in QML per altri file QML
- 12. Come condividere un oggetto che contiene un filehandle?
- 13. Come condividere un file in Android Programatically
- 14. C'è un modo per condividere un blocco (ad esempio un file di blocco) tra processi R?
- 15. Come condividere una variabile tra due classi?
- 16. Come condividere il codice tra due progetti?
- 17. Rendering OpenGL su un elemento QML
- 18. come condividere costanti (enumerazioni) tra le classi?
- 19. Come imitare un componente QML
- 20. Differenza tra oggetto codice e file eseguibile
- 21. QML - rilevamento posizione globale di un componente
- 22. Creare oggetto QML da C++ con proprietà specificate
- 23. Condividere i dati tra i taccuini IPython
- 24. È possibile condividere una cache tra WKWebViews?
- 25. come condividere costanti tra Java e Javascript
- 26. Condividere le variabili tra classi e metodi
- 27. Condividere un foglio di stylus tra i pacchetti
- 28. Come posso condividere un servizio tra le attività senza riavviarlo?
- 29. Algoritmo per condividere/regolare le spese tra un gruppo
- 30. È possibile condividere un cookie tra "alcuni" sottodomini?