Sie können QDeclarativeListProperty (oder QQmlListProperty in Qt5) nicht mit einem anderen Typ als QObject abgeleitete verwenden. So int oder QString wird nie funktionieren.
Wenn Sie eine QStringList oder eine QList oder etwas auszutauschen, die ein Array von einer der Grundtypen von QML, ist die einfachste Art und Weise unterstützt ist, es zu tun ist QVariant auf der C++ Seite zu verwenden, wie folgt aus:
#include <QObject>
#include <QList>
#include <QVariant>
class KeyboardContainer : public QObject {
Q_OBJECT
Q_PROPERTY(QVariant enableKey READ enableKey
WRITE setEnableKey
NOTIFY enableKeyChanged)
public:
// Your getter method must match the same return type :
QVariant enableKey() const {
return QVariant::fromValue(m_enableKey);
}
public slots:
// Your setter must put back the data from the QVariant to the QList<int>
void setEnableKey (QVariant arg) {
m_enableKey.clear();
foreach (QVariant item, arg.toList()) {
bool ok = false;
int key = item.toInt(&ok);
if (ok) {
m_enableKey.append(key);
}
}
emit enableKeyChanged();
}
signals:
// you must have a signal named <property>Changed
void enableKeyChanged();
private:
// the private member can be QList<int> for convenience
QList<int> m_enableKey;
};
auf der Seite QML, einfach eine JS Reihe von Nummer beeinflusst, wird die QML-Engine zu QVariant wandelt es automatisch, um es zu Qt verständlich zu machen:
KeyboardContainer.enableKeys = [12,48,26,49,10,3];
das ist alles!
'setParentItem' und' m_enableKeys' sind nicht Mitglieder der 'int', aber Sie versuchen, sie auf Schlüssel und ptrKey die beide int sind aufzurufen * das wird so nie .. – stijn
erinnern arbeiten, dass' QDeclarativeListProperty'/'QQmlListProperty' ist nur nützlich, um eine readonly Liste von Unterobjekten zu liefern, die von QObject abgeleitet sind, und diese Liste kann nicht nach der Instanziierungszeit geändert werden. – TheBootroo