可以从 C++ 在 QML 上写一个上下文 属性 吗?
Its possible write an context property on QML from C++?
我需要从 C++ 创建上下文 属性 "model(QAbstractItemModel)"。
但是,我只知道 QQmlProperty::write(...),并且此方法只接受 QVariant 作为 属性.
的值
有什么建议吗?
您必须使用 QVariant::fromValue()
并将模型指针传递给它,在下一部分中我将展示一个示例:
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlProperty>
#include <QStandardItemModel>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QStandardItemModel model;
for (int i=0; i<100; i++) {
QStandardItem* item = new QStandardItem(QString("%1").arg(i,2,10,QChar('0')));
model.appendRow(item);
}
QObject *obj = engine.rootObjects().first()->findChild<QObject *>("gv");
QQmlProperty::write(obj, "model", QVariant::fromValue(&model));
return app.exec();
}
main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
GridView {
anchors.fill: parent
objectName: "gv"
delegate: Rectangle {
Text {
text: display;
}
}
}
}
我需要从 C++ 创建上下文 属性 "model(QAbstractItemModel)"。
但是,我只知道 QQmlProperty::write(...),并且此方法只接受 QVariant 作为 属性.
的值有什么建议吗?
您必须使用 QVariant::fromValue()
并将模型指针传递给它,在下一部分中我将展示一个示例:
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlProperty>
#include <QStandardItemModel>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
QStandardItemModel model;
for (int i=0; i<100; i++) {
QStandardItem* item = new QStandardItem(QString("%1").arg(i,2,10,QChar('0')));
model.appendRow(item);
}
QObject *obj = engine.rootObjects().first()->findChild<QObject *>("gv");
QQmlProperty::write(obj, "model", QVariant::fromValue(&model));
return app.exec();
}
main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
GridView {
anchors.fill: parent
objectName: "gv"
delegate: Rectangle {
Text {
text: display;
}
}
}
}