Qt Quick中的信号与槽
在QML中,在Qt Quick中,要想妥善地处理各种事件,肯定离不开信号与槽,本博的主要内容就是整理Qt 中的信号与槽的内容。
1. 链接QML类型的已知信号
QML中已有类型定义的信号分为两类:一类由用户输入产生,如按键,鼠标,触摸屏,传感器等;另一类是由对象状态或属性变化产生的。
(1)信号处理器
信号处理器等价于Qt中的槽,一般是on<Signal>这种形式,比如onClicked:{}
信号处理器放在拥有信号的元素内部,当元素信号发射时处理器被调用,还有一种情况,要处理的信号不是当前元素发出来的,而是其他类型(对象),比如处理按键的Keys,这就是附加信号处理器。
(2)附加信号处理器
在QML语言的语法中,有一个附加属性和附加信号处理器的概念,这是附加到一个对象上的额外的属性,从本质上讲,这些属性是由附加类型来实现和提供的,他们可能被附加到另一种类型的对象上,附加属性与普通属性的区别在于,对象的普通属性所有对象本身或基类提供的。
Item
{
width:100;
height:100;
focus:true;
keys.ebable:true;
keys.onReturnPressed:{}
}
附加信号处理器,要遵循<AttachingType>.on<Signal>语法。
信号处理器与附加信号处理器有一个共性:响应新高的代码都放在元素的内部,通过ECMAScript代码块就地实现,而其实呢,Qt Quick中还有另外一种方式来处理信号和槽,那就是专业的Connections
(3)Connections
一个Connections对象创建一个到QML信号的连接。
前面的两种方式都是用on<Signal>这种就地代码块的方式,而在有些情况下,这样的处理并不方便,比如:
(1)你需要将多个对象链接到同一个QML信号上
(2)你需要在发出信号的作用域之外来建立链接
(3)发射信号的对象没有在QML中定义(可能通过C++导出的)
遇到上面的情况,我们可以使用Connections
Connections
{
target:area;
on<Signal>:function or code block;
}
2. 定义自己的信号
当自定义类型不可避免,当你需要通知别的对象你的状态发生了变化,此时最好的方法就是使用自定义信号。
自定义信号语法:
signal <name>[([<type><parameter name>[,…]])]
siganl denfineSignal(color clr)
Component
{
id:colorComponent;
Rectangle
{
id:colorPicker;
width:100;
height:100;
signal colorPicked(color clr);
MouseArea
{
anchors.fill:parent;
onPressed:colorPicker.colorPicked(colorPicker.color)
}
}
}
Connections
{
target:colorComponent;
onColorPicked:{}
}
3. 信号与槽的链接
其实在QML中还有一种更一般的方法,QObject:connect,这一下就让我们想起了Qt C++中使用的信号和槽。
Rectangle
{
id:relay;
signal message(string msg);
Component.onCompleted:
{
relay.message.connet(defineFun);
}
function defineFun(msg)
{
console.log("Message is:" + msg);
}
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- [Qt教程] 第14篇 2D绘图(四)绘制路径
- Qt-在Qt中std::vector使用简介
- Qt托动无标题界面(ReleaseCapture法)
- Qt编写地图综合应用52-加载离线地图
- Qt系列文章008-Qt信号槽介绍
- paip.c++ qt 外部dll共享库的导入以及引用
- Qt中实现单击button按钮发送单击信号,触发searchitem(QModelIndezparent,qsringtxt)槽函数,搜索后设置选中状态并设置背景色为红色。
- Qt 判断信号是否绑定了
- Qt 一个信号对应多个槽,多个信号对应一个槽的执行顺序
- Qt QSlider介绍(属性设置、信号、实现滑块移动到鼠标点击位置)
- Qt菜单 QMenu QAction连接信号槽函数
- Qt QLineEdit 信号函数总结
- Qt源码分析之moveToThread
- Qt信号与槽连接(松耦合)
- Qt信号阻塞和断开
- Qt的线程(两种QThread类的详细使用方式)「建议收藏」
- Qt quick性能提升[通俗易懂]
- 【Qt+FFMPEG】 - 封装 解码音视频 线程
- 【Qt】自定义的可拖动的Slider
- QT-QTreeWidget,QTabWidget
- QT开发之exe增加管理员权限
- QT界面布局、系统信号和槽、启动进程、EDIT回车快捷键、正常信号和槽、QMessageBox、UIC使用(界面重新生成)
- qt使用笔记一:信号与槽、GUI搬砖、打开文件、字符串处理
- QT案例实战1 - 从零开始编写一个OCR工具软件 (1)简述