Я хочу выставить список QStringlist из C++ в Qml и получить доступ к его элементам и их методам со стороны QML.Как вывести список списков из C++ в Qml?
Вот что я сделал до сих пор:
это мой .h файл для класса под названием менеджера.
#include <QObject>
#include <QStringList>
#include <QList>
class Manager : public QObject
{
Q_OBJECT
Q_PROPERTY(QStringList imagesPaths READ imagesPaths)
Q_PROPERTY(QStringList imagesPaths READ imagesPaths2)
Q_PROPERTY(QList<QStringList> imagesPathsLists READ imagesPathsLists)
public:
explicit Manager(QObject *parent = 0);
QStringList imagesPaths() const;
QStringList imagesPaths2() const;
QList<QStringList> imagesPathsLists()const;
signals:
public slots:
private:
QStringList m_imagesPaths;
QStringList m_imagesPaths2;
QList<QStringList> m_imagesPathsLists;
};
Это мой .CPP файл для реализации методов класса
#include "manager.h"
Manager::Manager(QObject *parent) :
QObject(parent)
{
m_imagesPaths << "one" << "two" << "three" << "four";
m_imagesPaths2 << "one-2" << "two-2" << "three-2" << "four-2";
m_imagesPathsLists << m_imagesPaths << m_imagesPaths2;
}
QStringList Manager::imagesPaths() const
{
return m_imagesPaths;
}
QStringList Manager::imagesPaths2() const
{
return m_imagesPaths2;
}
QList<QStringList> Manager::imagesPathsLists() const
{
return m_imagesPathsLists;
}
, и файл main.cpp, которые содержат регистрацию для моего класса
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <qqmlcontext.h>
#include "manager.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
Manager *mng = new Manager();
QQmlContext *ctxt = viewer.rootContext();
ctxt->setContextProperty("Manager",mng);
viewer.setMainQmlFile(QStringLiteral("qml/listOfLists/main.qml"));
viewer.showExpanded();
return app.exec();
}
Наконец, файл .Qml который пытается получить данные из списков
import QtQuick 2.0
Rectangle {
width: 360
height: 360
MouseArea {
anchors.fill: parent
onClicked: {
for(var i = 0; i < Manager.imagesPathsLists.count(); i++){
for(var j = 0; j < Manager.imagesPathsLists[i].count(); j++){
console.log(Manager.imagesPathsLists[i].at(j))
}
}
}
}
}
Всякий раз, когда я нажимаю на прямоугольнике я получаю следующую ошибку
QMetaProperty::read: Unable to handle unregistered datatype 'QList<QStringList>' for property 'Manager::imagesPathsLists'
file:///E:/DevWork/build-listOfLists-Desktop_Qt_5_2_1_MinGW_32bit-Debug/qml/listOfLists/main.qml:10: TypeError: Cannot call method 'count' of undefined
Я пытался решить эту проблему в течение двух дней в настоящее время. Я пробовал QQmlListProperty, но без успеха не знаю. Что я беспорядок.
@KubaOber Ну нить вы упомянули не решить мою проблему, я уже удалось разоблачить QstringList в Qml, но проблема здесь заключается в том, что я пытаюсь открыть QList так же, как и с QStringList, но он не работает. И я получаю эту ошибку 'QMetaProperty :: read: Невозможно обрабатывать незарегистрированный тип данных 'QList ' для свойства 'Manager :: imagesPathsLists'' –
Baso
Простите, я не заметил этой детали. –
Вы пытались зарегистрировать свой тип данных с помощью QMetaData? – CapelliC