【第二章】自定义信号和槽函数

简介: 【第二章】自定义信号和槽函数

自定义信号

除了使用Qt框架提供的信号外,我们还可以自己定义信号以及槽函数。自定义信号和槽函数使得程序设计更加灵活。与槽函数一样,使用信号跟使用普通函数类似,只不过需要使用关键字signals声明且函数的返回值类型必须是void。如下:

signals:
    void mySignal(int value);

值得注意的是,在类中自定义一个信号时==,实际上只是声明了一个函数原型==。信号本身并不需要“我们”自己来具体实现,而是由Qt依据元对象编程技术自动生成。所以我们只需要告诉Qt这个函数是一个信号就可以了。

发射信号

信号通过emit关键字来发射,实际上emit只是一个宏,并没有实际操作,仅仅用于标识

emit mySignal(42);

上述代码就发射了mySignal信号,并携带了一个整型参数。当信号被发射时,Qt的元对象系统会找到该信号连接的所有槽函数,并依次调用它们。

自定义槽

槽函数可以是任何的普通函数,只需要在声明的过程中使用slots关键字。事实上,新的Qt版本出来之后可以不使用slots关键字(为了便于区分,推荐使用)。此外,槽函数可以搭配访问限定符使用。

比如:

通过函数名自动连接槽

事实上,除了使用slots关键字定义槽函数,我们也能通过使用设计模式给控件添加槽函数,并自动生成槽函数的声明。操作如下:

  1. 打开设计者模式,选择一个控件,鼠标右键单机该控件,选择转入槽
  1. 选择一个事件绑定槽函数
  2. 自动生成槽函数的声明,定义则需要自己实现

值得注意的的是,通过这种方式生成的槽函数自动连接上了信号!该信号就是之前我们选择的事件。

案例

实验要求:自定义一个信号和槽并进行连接,该槽函数响应信号的行为为修改窗口标题。这个自定义信号的发送是通过点击一个按钮来触发的

  1. 自定义一个mysignal信号和槽myhandler

    2.连接mysignal信号和槽myhandler

  1. 用设计者模式生成一个按钮控件,并为这个按钮的点击事件连接一个槽函数。该槽函数的行为是发送信号mysignal

    4.构建窗口,点击按钮并观察结果

这个简单的案例将我们上述内容都结合在了一起。

相关文章
|
Linux API Windows
linux系统中利用QT实现蓝牙功能的方法
linux系统中利用QT实现蓝牙功能的方法
1139 0
dataframe获取指定列
dataframe获取指定列
1432 0
|
安全 网络协议 物联网
不看后悔系列之一篇搞懂LinuxCentOS搭建MQTT服务器及客户端操作使用
linux CentOS上搭建MQTT服务器并不难,主要就是用到了mosquitto这款消息代理服务软件。其采用发布/订阅模式传输机制,轻量、简单、开放并易于实现,被广泛应用于物联网之中。
3041 0
|
存储 安全 Linux
离线Linux服务器环境搭建
【9月更文挑战第3天】在离线环境下搭建Linux服务器需按以下步骤进行:首先确定服务器用途及需求,准备安装介质与所需软件包;接着安装Linux系统并配置网络;然后设置系统基础参数,如主机名与时区;安装必要软件并配置服务;最后进行安全设置,包括关闭非必要服务、配置防火墙、强化用户认证及定期备份数据。整个过程需确保软件包的完整性和兼容性。
403 3
|
算法 API 图形学
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
【Qt 学习笔记】QWidget的geometry属性及window frame的影响
1044 2
|
数据采集 测试技术 数据处理
LabVIEW控制PLC的实现方式
LabVIEW控制PLC的实现方式
675 1
Qt中的信号与槽如何学习?(包括自定义信号)这篇文章告诉你
以现实中的事件来举例的话,例如有两把不同颜色的信号枪,分别是红色,绿色,打响不通颜色的信号枪会触发不同的槽发生,比如说打响红色这个人就跑步,绿色就走步,但是还有一个很重要的机制,那就是连接,我们需要把信号枪去跟这个人的动作连接起来。 如果上面理解没问题的话我们可以把信号和槽看成两个工具,我们最重要的是如何去把这两个工具连接起来。 它的作用可以让我们更加灵活的去使用不同窗口间的切换以及某些事件的连接。
292 0
|
人工智能 文字识别 小程序
通义听悟--一个懂你的AI助理
介绍什么是通义听悟以及通义听悟的功能体验
17150 68
|
监控 算法 安全
【Qt 应用开发】Qt 中的信息输出机制:QDebug、QInfo、QWarning、QCritical 的简单介绍和用法
【Qt 应用开发】Qt 中的信息输出机制:QDebug、QInfo、QWarning、QCritical 的简单介绍和用法
1786 1