QT信号与槽机制 和 常用控件介绍

QT信号与槽机制

1、信号(signal): 所谓信号槽 (观察者模式)信号本质是事件。信号展现方式就是函数。当某一个事件发生之后,则发出一个信号(signal).
2、槽(slot): 就是对信号响应的函数,槽就是一个函数。槽函数与普通函数区别槽函数可以与一个信号关联,当信号被发射的时候,关联的槽函数被自动执行处理。信号与槽关联是使用 QObject::connect0函数进行实现。

信号函数只需要声明(不需要定义(实现) )而槽函数需要定义 (实现信号和槽机制底层是通过函数之间进行相互调用实现的。每个信号都可以用函数来表示,称为信号函数; 每个槽也可以用函数表示,称为槽函数槽函数可以使用 public slots/protected slots/private slots 修饰。signals和 slots 是 Qt 开发当中在 C++语言基础之上扩展的关键词,专门用于指明信号函数和槽函数

QObject::connect(......):

  • ​​​​​​​参数 1sender: 发出信号的对象;
  • 参数 2signal:sender 对象的信号
  • 参数 3receiver: 信号接收者
  • 参数 4method: receiver 对象的槽函数,当检测到 sender 信号,receiver
  • 对象调用 method 方法

​​​​​​​3、信号与槽机制连接方式
一个信号可以跟另一个信号相连
conect(object1,SIGNAL(signal1),object2,SIGNAL(signal1))


同一个信号可以跟多个槽相连
conect(object1,SIGNAL(signal2)object2,SIGNAL(slot2));
conect(object1,SIGNAL(signal2),object3,SIGNAL(slot1))


同一个槽可以响应多个信号
conect(object1,SIGNAL(signal2),object2,SIGNAL(slot2))
conect(object3,SIGNAL(signal2)object2,SIGNAL(slot2));

4、信号和槽机制优势: 松散羯合:类型案例。一个类若要支持信号
和槽,就必须从 QObiect 或 QObect 的子类继承。Qt 信号和槽机制不支持对模板的使用


5、信号与槽机制效率: 增强对象的之间通信的灵活性,但是也会损失一些性能。通过传递一个信号来调用槽函数将会比直接调用非虚函数运行速度慢,主要原因:

  1. 多线程的时候,信号可能需要排队等待
  2. 编组/解组传递的参数
  3. 安全地遍历所有的关联
  4. 需要定位接收信号的对象

GUI继承简介

布局管理器

  • 垂直布局
  • 水平布局
  • 网格布局
  • 表单布局

输出控件

  • Label: 标签
  • Text Browser: 文本浏览器
  • Graphics View : 图形视图框架
  • Calendar Widget: 日历控件
  • LCD Number: 液晶字体数字控件
  • Progress Bar: 进度条
  • Horizontal Line/Vertical Line: 水平线/垂直线
  • OpenGL Widget : (Open Graphics Library) 图形渲染控件
  • QQuickWidget : QML 嵌入控件

输入控件

  • 编辑组合框
  • 字体组合框
  • 行编辑框
  • 文本编辑
  • 多行文本编辑
  • 整数旋转框
  • 小数旋转框
  • 时间编辑
  • 日期编辑
  • 时间/日期编辑
  • 表盘控件
  • 水平滚动条
  • 垂直滚动条
  • 水平滑动条   
  • 垂直滑动条           

按钮

  • 按钮
  • 工具按钮
  • 单选按钮
  • 复选框

容器

  • 组框
  • 滚动区域
  • 工具箱
  • 选项卡窗口
  • 堆窗口
  • 框架
  • 窗口(小部件)
  • (Multiple Document Interface Area)多文档界面区域
  • 停靠窗口(停靠小部件)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在QML中,信号函数是一种用于实现对象间通信的机制,类似于Qt中的信号信号是来自QML对象的通知,而函数则是由信号触发的表达式或函数。在QML中,可以使用signal关键字定义有参或无参的信号。发送信号时,可以使用emit关键字加上信号名和参数进行发送。 为了让信号函数连接起来,需要使用connect函数进行连接。在Qt/C中,连接信号函数需要保持参数顺序和类型一致。而在QML中,连接信号函数更加方便,可以直接在信号之间使用Connections组件进行连接。 例如,在一个QML的Button组件中,可以定义一个信号testSig,然后在按钮点击事件中使用emit关键字发送信号。接着可以使用Connections组件来绑定信号函数,通过onTestSig函数来接收信号函数可以在函数体内进行任意的处理,例如打印参数值。 总结来说,QML中的信号函数机制Qt中类似,可以用于实现对象间的通信和事件处理。通过定义信号、发送信号和连接信号函数,可以实现灵活的交互和逻辑处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【QML事件处理】信号](https://blog.csdn.net/m0_60259116/article/details/129265884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Qml中信号的发送与接收信号函数的使用](https://blog.csdn.net/Shado_walker/article/details/51243408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [QML学习笔记【05】:QML信号](https://blog.csdn.net/m0_37845735/article/details/128511282)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱嵌入式的小佳同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值