您当前的位置: 首页 >  c++

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【零基础学QT】【048】Qml与C++互相调用

命运之手 发布时间:2020-02-05 21:07:16 ,浏览量:1

为了节省代码,把精力放在技术本身上,我们直接复用上篇博客中的main.qml来演示

Qml代码


	//main.qml
	
	import QtQuick 2.13
	import QtQuick.Window 2.13
	
	//窗口节点
	Window {
	    id: root
	    visible: true
	    width: 640
	    height: 480
	    title: "Qt Quick Demo"
	
	    IconButton {
	        anchors.fill: parent
	        anchors.margins: 100
	
	        icon: "images/1.png"
	        text: "Print Mouse Position"
	    }
	}


	//IconButton.qml

	IconButtonForm {
	    id: _root
	    width: 640
	    height: 480
	
	    //点击信号
	    signal clicked(var mouse)
	
	    //点击事件
	    clickRect.onClicked: {
	        _root.clicked(mouse)
	    }
	    
	    //监听属性变化
	    onWidthChanged: {
	        console.debug("IconButton width change")
	    }

	    //Qml方法
	    function sum(a, b) {
	        return a + b
	    }
	}
	

C++将Qml加载为对象 C++可以通过QQmlComponent和QQuickView两种方式来获得Qml中的对象


	//QQmlComponent

	int main(int argc, char *argv[]) {
	    QGuiApplication app(argc, argv);
	
	    QQmlApplicationEngine engine;
	    QQmlComponent component(&engine, "qrc:///main.qml");  //注意路径写法
	    QObject *object = component.create();
	    qdebug className();  //打印结果为:QQuickWindowQmlImpl
	    QQuickWindow *window = qobject_cast(object);
	    qdebug setProperty("width", 1000);
	
	    QQmlProperty(object, "width").read();
	    QQmlProperty(object, "width").write(1000);
	
	    return app.exec();
	}

C++调用Qml对象方法


    QQuickView view;
    view.setSource(QUrl("qrc:///IconButton.qml"));
    view.show();
    QObject *object = view.rootObject();

    QVariant returnValue;
    QMetaObject::invokeMethod(object, "sum", Q_RETURN_ARG(QVariant, returnValue), Q_ARG(QVariant, 1), Q_ARG(QVariant, 2));
    qdebug             
关注
打赏
1654938663
查看更多评论
0.0406s