QML中与Loader source 中的signal与property交互问题

2 篇文章 0 订阅

主要内容:

1.  Loader中的signal信号交互;

2.  Loader中的property属性交互;


看如下代码:

//LoadedModule.qml
import QtQuick 2.0


Rectangle {
    id:root;
    width: 200;
    height: 100;
    color: "blue";
    property string content: qsTr("This is a Rectangle Item");
    signal mouseClicked();
    
    MouseArea {
        anchors.fill: parent
        property bool oldState: true;
        onClicked: { 
            parent.color = oldState ? 'red' :"blue";
            oldState = !oldState;
            root.mouseClicked();
        }
    }
    onContentChanged: {
        console.log("property <content> has changed");
        console.log(root.content);
    }
}

作为被动态载入的模块,定义了一个信号 mouseClicked(),并且自定义了一个property -> string content 初始值为" This is a Rectangle Item";并在信号处理器

onContentChanged中打印出属性变化和更改后的字符串。下面再看main.qml:

import QtQuick.Window 2.0
import QtQuick.Controls 2.0
 
//
//处理Loader -> source 中的 signal 和property问题
//
Window{
    id:rootWin;
    width: 400;
    height: 540;
    visible: true;
 
    
    Loader{
        id:modLoader;
        source: "qrc:/LoadedModule.qml";
        onLoaded: {
            //直接通过signal.connect方法连接
            modLoader.item.mouseClicked.connect(on_Mouse_Clicked);
            console.log(modLoader.item.content);
            
            /* 修改content */
            modLoader.item.content = qsTr("modify property < content >");
        }
    }
    function on_Mouse_Clicked(){
        console.log("on_Mouse_Clicked");
    }
}
 
 
 
定义了一个Loader -> id : modLoader,设置source为LoadedModule.qml。并在onLoaded中处理信号与属性交互。由于在QML中signal 也是对象,因此具有connect方法。 

可以直接使用connect连接到处理函数,在上述代码中定义处理函数为 on_Mouse_Clicked() ,简单进行一个打印输出。从代码中可以看出,信号与属性的交互均是通过Loader的item实现的。

item是Loader的属性,它拥有被载入模块的最顶层(top-level)的对象(object),在此例中就是LoadedModule.qml中的Rectangle : root。如果signal和property不是定义在

top-level。那么Loader 是访问不到的。程序运行后输出如下:

QML debugging is enabled. Only use this in a safe environment.

qml: This is a Rectangle Item

qml: property <content> has changed

qml: modify property < content >

qml: on_Mouse_Clicked

qml: on_Mouse_Clicked

qml: on_Mouse_Clicked


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值