considerare questo semplice classe enum:Assegnazione o modifica proprietà int utilizzando enum all'interno QML
#include <QObject>
class BookTypes : public QObject
{
Q_GADGET
Q_ENUMS(AllBooksType)
public:
enum AllBooksType{
eMagazine,
eReference,
eTextBook,
eThesis
};
signals:
public slots:
};
registrazione Digitare main()
qmlRegisterUncreatableType<BookTypes>("trial", 1, 0, "BookTypes",
"Don't create qml instance for BookTypes");
e questo è campione QML:
Rectangle {
id: rect
x: 100; y: 100
width: 100
height: 70
color: "PowderBlue"
border.color: "RoyalBlue"
border.width: 1
radius: 3
MouseArea{
x: 0; y: 0
height: parent.height
width: parent.width
property int bt: BookTypes.eTextBook //perfect. now bt is 2
onClicked: {
console.debug("old book type:- ")
console.debug(bt) //prints 2
console.debug("selected book type:- ")
bt = BookTypes.eReference //gives error - why ?
console.debug(BookTypes.eReference) //prints 'undefined'
console.debug(bt)
}
}
}
Questo significa che l'enum è correttamente esposto, poiché inizializza con successo bt
y in
property int bt: BookTypes.eTextBook
Quello che non capisco è: perché non è accessibile quando provo a sostituire il valore della bt
nel gestore:
bt = BookTypes.eReference //gives error - why ?
Come faccio a passare una tale enum
come argomento di Q_INVOKABLE
metodo, ad esempio:
console.debug(BookTypes.eReference) //prints 'undefined'
SomeObj.someCPPMethod(BookTypes.eReference) // sends 'undefined' and defaults to 0
A proposito, Q_GADGET è "una versione più leggera della macro Q_OBJECT per le classi che non ereditano da QObject ma vogliono comunque utilizzare alcune delle funzionalità di riflessione offerte da QMetaObject." Non sono sicuro che derivare da QObject sia una buona idea; probabilmente dovresti fare l'una o l'altra. – Mitch
sì @ Mitch Grazie! Questo snippet è una delle parti di prova ed errore. Nel codice reale userò QObjects ovunque. – essbeev