如何在QML应用中设计一个C++ Model并使用它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在QML应用中设计一个C++ Model并使用它相关的知识,希望对你有一定的参考价值。

参考技术A #ifndef DATALISTMODEL_H
#define DATALISTMODEL_H

#include <QAbstractListModel>
#include <QStringList>

class Data

public:
Data(const QString &type, const QString &size);

QString type() const;
QString size() const;

private:
QString m_type;
QString m_size;
;

class DataListModel : public QAbstractListModel

Q_OBJECT
public:
enum AnimalRoles
TypeRole = Qt::UserRole + 1,
SizeRole1
;

DataListModel(QObject *parent = 0);
int rowCount(const QModelIndex & parent = QModelIndex()) const;
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
Q_INVOKABLE void insert(int index, const Data &data);
Q_INVOKABLE void append(const Data &data);
Q_INVOKABLE void remove(int index);
Q_INVOKABLE void append(const QVariantMap map);

signals:
void countChanged(int arg);

private:
int count() const;

protected:
QHash<int, QByteArray> roleNames() const;

private:
QList<Data> m_list;
;

#endif // DATALISTMODEL_H本回答被提问者采纳

如何在另一个应用程序中使用 QT QML C++ 插件?

【中文标题】如何在另一个应用程序中使用 QT QML C++ 插件?【英文标题】:How to use a QT QML C++ plugin in another application? 【发布时间】:2019-08-27 17:29:54 【问题描述】:

我正在尝试围绕 QML 插件进行思考,我希望有人可以向我解释,因为我似乎遗漏了一些东西。

所以我继续创建了一个 Qt Quick 2 扩展插件。我有一个简单的源文件,我对 QQmlExtensionPlugin 类进行了子类化,并使用 qmlRegisterType 注册了新类型。我已经构建了这个项目,它给了我一个 DLL(我在 Windows 7 上,并使用 QT 5.13)。 据我了解,我现在应该能够将此 DLL 和 qmldir 文件放入一个新项目中,并且我应该能够从通过 qmldir 文件公开的 DLL 加载 QML。

不幸的是,当我这样做时,它不起作用。我在网上看到的所有示例都显示了一个导入插件 qml 的 qml 文件,但每次我尝试这样做时,导入都不起作用并给我一个“未找到 QML 模块”错误。

所以我的问题是:我如何实际使用另一个项目中的 DLL 和 qmldir 文件将 DLL 中的 QML 公开给新项目?

【问题讨论】:

【参考方案1】:

您似乎缺少根 QML import path。

默认的根导入路径是%QTDIR%/qml,您可以简单地将插件模块复制并粘贴到此文件夹中,以便 QML 引擎可以找到并加载它。

或者更常见的做法,使用QQmlEngine::addImportPath()

QQmlEngine engine;
engine.addImportPath(qApp->applicationDirPath() + "/qml");

请注意,您应该始终使用Module (Namespace) Imports 来导入您的 C++ 插件模块:

import My.CppModule 1.0

目前使用Directory Imports 导入C++ 插件模块是一种未定义行为

import "My/CppModule" // Might fail

【讨论】:

就是这样,我将我的 DLL 和 qmldir 文件复制到 QML 导入路径位置,一切正常。谢谢!现在我想知道是否可以添加不同的 QML 导入路径位置,这样我就不必将 DLL 复制到 QT 应用程序文件夹。

以上是关于如何在QML应用中设计一个C++ Model并使用它的主要内容,如果未能解决你的问题,请参考以下文章

Qml 应用程序编译 *Form.ui.qml 文件但忽略关联的 .qml 文件

Qt中使用QML和Listview的问题

C++设计:如何在C++中设计“可以执行或可以”的关系

如何在 node.js 中设计持久化服务

如何在另一个应用程序中使用 QT QML C++ 插件?

如何在 QtWebEngine QML 应用程序中设置用户代理