首页| 论坛| 消息
主题:[Qt Dream]Qt 在线技术交流之C++ 与 QML 交互
彩阳发表于 2016-03-11 15:36
本周六晚七点半开讲
内容:C++ 与 QML 交互
地点上海Qt开发联盟 (QQ群号:279906625) 群视频。
如果您想围观的话,那么也可以进入全民TV直播(这里)来观摩。
以下为本次交流会大纲:

QML 与 C++ 的交互
有人说 QML 与 C++ 的交互太麻烦了,由于 QML 本身是面向对象的,所以交互起来依赖于 Qt 本身的元对象系统,显得十分笨重。但是仔细研究就会明白这样做的意义了。

QML 与 C++ 的数据交互
Qt TypeQML Basic Typeboolboolunsigned int, intintdoubledoublefloat, qrealrealQStringstringQUrlurlQColorcolorQFontfontQDatedateQPoint, QPointFpointQSize, QSizeFsizeQRect, QRectFrectQMatrix4x4matrix4x4QQuaternionquaternionQVector2D, QVector3D, QVector4Dvector2d, vector3d, vector4dQ_ENUMenumerationQVariant,QVariantMap,QVariantList,QJSValuevar,jsObject,jsArray,variantQJsonValue,QJsonObject, QJsonArrayvar, JSONObject带有 Q_GADGET 声明的类varQObject*idQQmlListPropertylist经测试,QVariant,QVariantMap,QVariantList 可以处理var类型的属性。
另外可以将 qml 对象的 id 传入,C++参数是 QObject*。
如果要将一个数组从 C++ 传给 QML,最好使用 QJsonArray,或者QList,QList,QList,QQmlListProperty。
注意,不同 QJSEngine 之间的 QJSValue 不同互相使用。

QML 调用 C++ 对象方法

全局单例

qmlRegisterSingleton
注册的单例有两类,一类 QObject*,一类 QJSValue。

QQmlContext::setContextProperty(QString, QObject*);
这个注册到上下文时要注意他的生命还未开始。

注册新类型到 QML

QObject

QQuickItem

QQuickPaintItem

QAbstractItemModel
推荐使用 QAbstractListModel,省时间。
如下诉代码:
int rowCount(const QModelIndex &parent) const;QVariant data(const QModelIndex &index, int role) const;QHash roleNames() const;enum Roles{NameRole = Qt::UserRole + 1,AgeRole};int rowCount(const QModelIndex &parent) const;QVariant data(const QModelIndex &index, int role) const;QHash roleNames() const;int TestModel::rowCount(const QModelIndex &parent) const{Q_UNUSED(parent)return m_datas.length();}QVariant TestModel::data(const QModelIndex &index, int role) const{if (!index.isValid() || index.row() < 0)return QVariant();if (index.row() >= m_datas.count()) {qWarning()
回帖(8):
8楼:不错,支持一个!!对了C++和QML结合还有很多例子,尽在Qt帮助文档。168won极速赛车
7楼:学习学习
6楼:楼主:
qml 怎么用 c++申明的枚举类型?

全部回帖(8)»
最新回帖
收藏本帖
发新帖