【发布时间】:2015-10-30 09:38:59
【问题描述】:
我有关注QObject:
#ifndef UETYPES
#define UETYPES
#include <QHash>
#include <QByteArray>
#include <QMultiMap>
#include <QString>
#include <QObject>
#include "../database/ueuserrecord.h"
#include "../database/ueorderrecord.h"
class UeTypes : public QObject
{
Q_OBJECT
public:
typedef QHash<int, QByteArray> UeTypeRoles;
/*
* QString first parameter userId
* QString second parameter placeId
*/
typedef QMultiMap<QString, QString> UeTypeLoggedUsers;
};
#endif // UETYPES
我正在尝试通过 main.cpp 中的 qmlRegisterType 将 typedef QMultiMap<QString, QString> UeTypeLoggedUsers 公开/导出到 QML:
#include <QtQml>
#include <QApplication>
#include <QQmlApplicationEngine>
#include "core/uetypes.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<UeTypes::UeTypeLoggedUsers>("si.test",
1,
0,
"UeTypeLoggedUsers");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
但是,当我尝试编译此代码时,出现以下错误:
错误:“staticMetaObject”不是“QMultiMap”的成员
为什么会出现此错误,如何消除它?
【问题讨论】:
-
您只能从 C++ 向 QML 公开从 QObject 派生的类型。
-
顺便说一句,试试 QVariantMap。您无需注册即可将其传递给 QML。
-
@folibis 嗯,但我需要
QMultiMap,而不是QMap,因为可能有多个相同的键... -
好的,但是你需要以某种方式包装到 QObject 后代
-
你能把它转换成带有键/值对的 QVariantList,而不是 QMultiMap 吗?