将 QMultiMap<QString、QString> 导出到 QML

exporting QMultiMap<QString, QString> to QML

本文关键字:QString QML gt QMultiMap lt      更新时间:2023-10-16

我有以下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向QML公开/导出typedef QMultiMap<QString, QString> UeTypeLoggedUsers

#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"的成员

为什么我会出现这个错误,我该如何消除它?

您可以通过Qt属性系统直接在QML中使用QVariantMap。它被声明为typedef QMap<QString, QVariant>

class UeTypes : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QVariantMap map READ map WRITE setMap NOTIFY mapChanged)
public:
    QVariantMap map() const { return mMap; }
    void setMap(QVariantMap map) {
       if(mMap != map) {
           mMap = map;
           emit mapChanged();
       }
    }
signals:
    void mapChanged();
private:
    QVariantMap mMap;
};

您可以使用QMap::insertMulti向QMap插入多个相同的键。它相当于QMultiMap::insert。