Qt 5.4 QML 自定义信号

发布于 2024-12-30 08:25:05 字数 3010 浏览 10 评论 0

自定义信号格式

signal <name>[([<type> <parameter name>[, ...]])]  

实例代码

import QtQuick 2.0  
import QtQuick.Controls 1.1  
  
Rectangle {  
    width: 320;  
    height: 240;  
    color: "#C0C0C0";  
      
    Text {  
        id: coloredText;  
        anchors.horizontalCenter: parent.horizontalCenter;  			//居中
        anchors.top: parent.top;  
        anchors.topMargin: 4;  
        text: "Hello World!";  
        font.pixelSize: 32;  
    }  

//Component:组件。相当于模块声明。只在实例生效。可以嵌入 QML 文件中,作为下文的声明,也可以单独写 QML 中,可以复用
    Component {  	//定义组件			
        id: colorComponent;  
        Rectangle {  	//组件为矩形框,在此内部定义信号
            id: colorPicker;  
            width: 50;  
            height: 30;  
            signal colorPicked(color clr);  //**定义信号 colorPicked**括号内:参数类型 参数名
            MouseArea {  //为了触发信号,我给 Rectangle 引入了 MouseArea 。MouseArea 是专门处理鼠标操作的 item ,
                         //有一个 onClicked 信号
                anchors.fill: parent  	//填充整个矩形
                onPressed: colorPicker.colorPicked(colorPicker.color); //onPressed 槽连接:被点击后,
                                                      //发送 colorPicked 信号,信号携带参数为该块的颜色
            }  
        }  
    }  
      
//  Loader 是专门用来动态创建组件的,它可以从 qml 文件中创建组件,也可以指定 sourceComponent 来创建。
// 即 Loader 为 Componet 的实现,只有实现了的 Component 才可以显示
    Loader{  		
        id: redLoader;  
        anchors.left: parent.left;  
        anchors.leftMargin: 4;  
        anchors.bottom: parent.bottom;  
        anchors.bottomMargin: 4;  
        sourceComponent: colorComponent;  		//指定实例化的组件
        onLoaded:{  
            item.color = "red";  							//这里什么意思不明白
        }  
    }  
      
    Loader{  
        id: blueLoader;  
        anchors.left: redLoader.right;  
        anchors.leftMargin: 4;  
        anchors.bottom: parent.bottom;  
        anchors.bottomMargin: 4;  
        sourceComponent: colorComponent;  
        onLoaded:{  
            item.color = "blue";  
        }  
    }  
      
    Connections {  
        target: redLoader.item;  
        onColorPicked:{  
            coloredText.color = clr;  
        }  
    }  
      
    Connections {  
        target: blueLoader.item;  
        onColorPicked:{  
            coloredText.color = clr;  
        }  
    }  
}  

简单的信号槽连接

import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.2


Window {
    visible: true
    width: 100;
    height: 100;

    Rectangle {
        id: forwarder;
        anchors.fill: parent
        signal send();		//定义一个 send 信号
        onSend: console.log("Send clicked");//当 send 信号产生时,打印日志

        MouseArea {
            id: mousearea;
            anchors.fill: parent;
            onClicked: 
console.log("MouseArea clicked");//点击时打印日志
        }

        Component.onCompleted: {//组件完成后
            mousearea.clicked.connect(send);	//链接信号槽
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

微凉

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文