我无法访问 QML 中的属性。
QList 是一个属性,我可以访问它,但当我尝试在QML中访问 classB 的属性时,我收到类型错误/未定义。以下是代码:
[编辑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
错误。我在这里做错了什么?
答案 0 :(得分:1)
你做错了是希望String str = "aaaaabbb";
String strArray[] = str.split("(?<=(.))(?!\\1)");
for(String value : strArray){
System.out.println(value);
}
运营商能够运作。它不会。
如果将[]
转换为QList
,QML会自动转换为JS数组,有一种方法可以使其正常工作。
但我实际建议的是简单地使用附件功能,实现QVariantList
并在必要时使用get(index)
功能并设置。
您还可以查看此generic object list model,它非常灵活,功能强大且有用,支持任何set(index)
子级,包括在QML中定义的对象,声明性和嵌套定义以及最后一个不仅如此,它可以直接用作模型。