QML物件與C++的互動

透過QtC++的程式碼與QML做溝通,實現一個MVC的軟體架構。
摘要由CSDN通过智能技术生成

原文:Interacting with QML Objects from C++

將QML物件載入C++中

QQmlComponent和QQuickView都可以將QML載入成C++ Object並且透過C++的程式碼去改變它的內容。但是QQuickView的不同處在於它是一個QWindow的子類別,被載入的QML將會被渲染並且顯示出來,所以QQuickView通常被用來包裝可以被顯示的QML,作為使用者界面。

首先,這裡有一個MyQml.qml文件

import QtQuick 2.0 //也可以是較高的版本

Item {
    width : 200
    height : 200
}

透過QQuickView載入QML

QQuickView view ;

view.setSource(QUrl::fromLocalFile("MyQml.qml")) ;
view.show() ;

QObject *object = view.rootObject() ;

QQuickView會自動建立QML的實例,所以可以直接透過呼叫QQuickView::rootObject()這個函式就可以值得到。

透過QQmlComponent載入QML

QQmlEngine engine ;

QQmlComponent component ( &engine , QUrl::fromLocalFile("MyQml.qml") ) ;

QObject *object = component.create() ;

利用QQmlComponent如果想要得到QML的實例,與QQuickView不同的是要透過QQmlComponent::create()來建立QML的實例。

可以透過這種方法去改變物件的特性

object->setProperty( "width" , 500 ) ;
QQmlProperty(object,"width").write(500) ;

不過其實封裝好的QML真正類別是QQuickItem,所以也可以透過這種方法去改變物件的特性,以確保編譯時能正常執行(compile-time safety)。

QQuickItem *item = qobject_cast<QQuickItem*>(object) ;
item->setWidth(500)

利用objectName存取QML物件

findChild範例

因為QML的rootObject底下還有很多的QML Object,形成一個樹狀結構,所以常常需要對其下的子物件做一些控制。可以透過QObject::findChild<class>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值