Qml中信号的发送与接收信号槽函数的使用

原创 2016年04月25日 16:47:40
        在Qt/C++中,发送信号的函数和对应的槽函数在参数顺序、类型方面必须保持一致,此外,要让一个信号发射后进入相应的槽函数,必须用connect进行连接,这样,信号和槽才能连接起来。在QML中,发送信号和接受信号的槽,用起来比Qt/C++还更方便,用法如下:
1. 定义信号: signal sigFunc(type param)进行定义
2. 发送时信号:emit: sigFunc(parameter);

3. 接受信号的槽:onSigFunc: { //...; //接收发送过来的参数时,直接用信号定义时的形参param即可 }

例子:
ImageItem.qml文件如下:

import Material 0.1
import QtQuick 2.4
import QtQuick.Layouts 1.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Rectangle {
    id: rect
    border.color: "red"
    width: 150
    height:150
    signal testClicked(color colParam);	//该文件中发送带参信号

    Image {
        id:img
        anchors.fill: parent
        fillMode: Image.PreserveAspectFit
        source:"12345.jpg"
    }

    MouseArea {
        id: big_mouse
        anchors.fill: parent
        property point clickPos: "0,0"

        onPressed: {
            clickPos = Qt.point(mouse.x,mouse.y)
            console.log("onPressed:", mouse.x,mouse.y)

            emit: testClicked("red");	//发送带参的信号
        }
        onPositionChanged: {
            var deltdata = Qt.point(mouseX-clickPos.x, mouseY-clickPos.y);
            rect.x += deltdata.x
            rect.y += deltdata.y
        }
    }
}
ImageTest.qml文件如下:

import Material 0.1
import QtQuick 2.4
import QtQuick.Layouts 1.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4

Window {
    id: win
    visible: true
    property string windowBgColor: "white"

    width: 300
    height:300
    x:100
    y:100

    MouseArea {
        anchors.fill: parent

        onWheel: {
            if (wheel.angleDelta.y > 0) {
                rect.width += 5;
                rect.x -= 2

                rect.height += 5;
                rect.y -= 2
            }
            else {
                rect.width -= 5;
                rect.x += 2

                rect.height -= 5;
                rect.y += 2
            }
        }
    }
    ImageItem {
        id: rect
        onTestClicked: {	//响应signal testClicked(color colParam);信号
            console.log("emit parameter", colParam);
            rect.color = colParam;	//运用时,直接用形参名即可
        }
    }
}
以上代码,在ImageItem中当点击时发送信号testClicked并携带一个参数color,在ImageTest中接收该信号,并运用携带的color参数改变了北背景颜色,以上qml可以直接运行试看效果。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Qt Quick 事件处理之信号与槽

Qt Quick 最大的一个特点,是与 Qt 元对象系统的结合;而这里边,我们熟稔的,鼎鼎大名大名鼎鼎的,要不断打交道的,就是信号与槽了。历史是割不断的,继承与发展才是正确的价值观……,了解过 Qt ...
  • foruok
  • foruok
  • 2014年06月11日 12:52
  • 27354

Qt:QML:QML于C++交互之信号与槽(signal&slot )

connect c++ SIGNAL with QML SLOT连接qml中信号与函数 Component.onCompleted: { //qml 信号连接 qml函数...

QML中信号槽机制的使用

QT的最大特点就是信号槽了,自然QML也必须支持。不过呢,稍微会有些不同,比较语言不同了嘛。 QML中信号槽连接有三种方式: 第一种我们已经使用过了,就是类似onclicked这样的。 比如下面的代码...

【QT】QML中的信号和函数

在QtC++中,signals& slots是其核心机制,是应用程序与UI组件交互的神经网络,同样在QML中,也有类似的signal& handler机制,signal信号就是我们常说的一种事件,...
  • iEearth
  • iEearth
  • 2014年12月08日 11:22
  • 4936

Qt Quick 之 QML 与 C++ 混合编程详解

Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画、各种绚丽效果的 UI 都不在话下。但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket...
  • foruok
  • foruok
  • 2014年07月04日 12:22
  • 99773

qt下qml和c++交互信号槽机制测试

qt下qml和c++信号槽机制测试 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:Qt5.2 ...
  • jdh99
  • jdh99
  • 2014年01月24日 16:29
  • 8852

解读QML之四

解读QML之四 QML对象属性         每一个QML对象类型都定义了一系列属性。每创建一个该对象类型的实例,该实例的这些属性也自动被创建了。接下来我们讨论几种不同类型的属性。 id属性 ...

QML signal与signal handler系统

QML 的signal 和 signal handler机制的存在,是为了应用能够和UI组件之间相互交互。signal就是button clicked、mouse area pressed这些even...

QtQuick学习笔记之QML自定义信号

这里把Qtquick核心编程里面的练习记录下: import QtQuick 2.5 Rectangle{ width:300; height:400; id:root; ...

如何在QML中调用C++的方法并接收C++的信号

 如何在QML中调用C++的方法并接收C++的信号 Contents1在QML中调用c++方法并接收信号2为c++类添加被调用的方法和信号3运行程序4相关链接  在QML中调用c++方法并接收信号 继...
  • deyili
  • deyili
  • 2011年03月02日 10:29
  • 5059
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qml中信号的发送与接收信号槽函数的使用
举报原因:
原因补充:

(最多只允许输入30个字)