将 QMultiMap<QString、QString> 导出到 QML
exporting QMultiMap<QString, QString> to QML
我有以下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。
相关文章:
- 从C++实例化QML
- 将 Qvector<uint8_t> 转换为 QString
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- 连接从 QML 到 Qt 的信号:var 到 QList<QString>
- 将 QMultiMap<QString、QString> 导出到 QML