相关
如果考虑到在QML界面上完成交互,会有一点类似前后端分离的感觉;具体交互可以参考
场景
初步应用qml界面,主体逻辑还是在cpp上,qml仅用于实现界面
方案
加载qml文档生成界面
需要界面容器QQmlComponent 、QQuickWidget、QQuickView,其中使用QQuickView时不能使用window作为根元素
访问/设置属性/方法method
QQuickView view(QUrl("qrc:/main.qml"));
view.show();
QObject *qmlObj=view.rootObject();
//QQmlProperty
qmlObj->property("msg");
QQmlProperty(qmlObj,"height").write(300);
//QQuickItem
QQuickItem *item=qobject_cast<QQuickItem*>(qmlObj);
item->setWidth(300);
item->width();
//QObject
QObject *qmlRect=qmlObj->findChild<QObject*>("rect");
if(qmlRect){
qmlRect->property("color");
}
//调用QML方法
QVariant val_return; //返回值
QVariant val_arg; //参数值
QMetaObject::invokeMethod(qmlObj,
"qml_method",
Q_RETURN_ARG(QVariant,val_return),
Q_ARG(QVariant,val_arg));
//信号槽
QObject::connect(...);