我無法訪問QML中的屬性。QML - 訪問存儲在QList中的QObject類屬性
的QList是一個屬性,我能夠訪問,但是當我嘗試訪問的屬性CLASSB在QML我得到的錯誤類型/未定義。以下是代碼:
[EDIT 1] - 改變了的QList到基於該建議QVariantList:
//ClassA.h
#include <QObject>
#include "classb.h"
Q_DECLARE_METATYPE(QList<ClassB*>)
class ClassA : public QObject
{
Q_OBJECT
Q_PROPERTY(QVariantList objList READ getClassBDetails) //[EDIT 1]
public:
explicit ClassA(QObject *parent = nullptr);
QVariantList getClassBDetails(); //[EDIT 1]
private:
QVariantList m_list; //[EDIT 1]
ClassB m_Bobj;
};
//ClassA.cpp
#include "classa.h"
ClassA::ClassA(QObject *parent) : QObject(parent)
{
m_list.append(QVariant::fromValue(&m_Bobj)); //** Appending to QvariantList
}
QVariantList ClassA ::getClassBDetails() //[EDIT 1]
{
return m_list;
}
//ClassB.h
#include <QObject>
class ClassB : public QObject
{
Q_OBJECT
Q_PROPERTY(int val READ getval WRITE setval NOTIFY valChanged)
public:
explicit ClassB(QObject *parent = nullptr);
int m_val = 10;
int getval();
void setval(int val);
signals:
void valChanged();
public slots:
};
//ClassB.cpp
#include "classb.h"
ClassB::ClassB(QObject *parent) : QObject(parent)
{
}
int ClassB::getval()
{
return m_val;
}
void ClassB::setval(int val)
{
m_val = val;
emit valChanged();
}
//Main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "classa.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
ClassA aObj;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("classAObj",&aObj);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
//Main.qml
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Component.onCompleted: {
console.log("value========",classAObj.objList[0].val) //** Same error
}
}
如果我嘗試訪問"classAObj.objList[0].val"
我得到TypeError: Cannot read property 'val' of undefined
錯誤。我在這裏做錯了什麼?
其實我嘗試過** QVariantList **,但是我無法插入'ClassB'對象。請給我舉個例子嗎? – pra7
我不知道如何「可編輯」這樣的隱式轉換列表。我建議你不要打擾。如果你想從C++插入,你顯然會插入一個'QVariant :: fromValue(objPtr)',因爲它只是一個'QList',你插入的方式與你插入任何'QList'相同。 –
dtech
謝謝,我現在能夠通過。之後,我可以使用'[]'操作符訪問?因爲我喜歡這個'var res = classAObj.objDetails',後來我試圖打印它,像這樣'res [0]'...並且得到相同的錯誤.. – pra7