【QT开发笔记-基础篇】| 第一章 QT入门 | 1.5 标准信号槽

本节对应的视频讲解:B_站_链_接

https://www.bilibili.com/video/BV1vW4y1676Q

本节讲解信号和槽的概念,以及标准的信号槽

标准信号槽-案例


1. 什么是信号槽


1.1 信号

首先看一下什么是事件和信号

QPushButton 的单击事件为例:

按下按钮,会触发 mousePressEvent 事件,然后 QPushButton 会发射 pressed() 信号;

松开按钮,会触发 mouseReleaseEvent 事件,然后 QPushButton 会发射 released() 信号和 clicked() 信号

常用的事件有很多,比如鼠标的单击和双击事件,鼠标的移动事件,键盘的输入事件等。事件会专门在后边进行讲解

当某个实例化的对象上产生这些事件时,该实例化对象就会发出特定的信号。

信号的本质就是函数,并且是只需声明,无需实现的函数

具体一个类有哪些信号,可以查看 Qt 的帮助文档,以 QPushButton 为例:

首先打开 QPushButton 的帮助说明:
QPushButton

接着,跳转到其父类 QAbstractButton,这里就有信号了,如下:
信号

点击【Signals】可以跳转到信号处,如下:
信号

可以点击对应的链接,查看详细说明
这里总结如下:

// 当按钮被点击(按下并抬起)之后,发送该信号,其中带有一个默认参数
// 对于QPushButton 通常不需要传递这个默认参数
// 对于可选中/取消选中的按钮,比如复选框QCheckBox、单选框QRadioButton 可以通过该参数,获取其是否选中
void clicked(bool checked = false);

// 当按钮被按下时,发送该信号
void pressed();

// 当按钮被抬起时,发送该信号
void released();

// 当按钮状态改变时,发送该信号,其中带有一个参数checked
// checked 用于标识复选框QCheckBox、单选框QRadioButton是否被选中
void toggled(bool checked);

由于这是我们第一次接触信号和槽,所以这里讲解的比较细致。以后遇到其他类的信号和槽,就按照这个方法来查阅即可。


1.2 槽

我们通常说的 ,就是槽函数

当点击了 QPushButton 按钮之后,通常需要执行对应的操作,比如让 QMainWindow 窗口最大/最小/正常化显示,或者关闭窗口

按照以上查看信号的方法,查看 QMainWindow 提供了哪些槽函数,同样跳转到其父类 QWidget 中查看,如下:
槽函数

可以点击对应的链接,查看详细说明,比如:

// 最大化显示
void showMaximized();

// 最小化显示
void showMinimized();

// 正常显示
void showNormal();

// 关闭窗口
bool close();

讲解了信号和槽之后,如何实现如下效果呢?

效果:点击按钮后,实现窗口的最大/最小/正常显示,或者关闭窗口。

答:这就需要将信号和槽使用 connect 函数进行连接

比如将 QPushButton 按钮的 clicked() 信号和 QMainWindow 窗口的 close() 槽函数建立连接之后,当点击了 QPushButton 按钮后,Qt 框架就

会自动调用 QMainWindow 窗口的 close() 槽函数,从而实现窗口的关闭。

connect 方法是 QObject 类的静态方法,它有多个重载的方法,如下:
connect

Qt4 和 Qt5 中连接信号和槽的方法略有不同,后面会详细说明。

不过总的来说,connect 函数的一般形式如下:

connect(sender, signal, receiver, slot);

其中:

  • sender
    发出信号的对象。比如 QPushButton 按钮

  • signal
    发出的信号。比如 clicked()

  • receiver
    接收信号的对象。比如 QMainWindow 窗口

  • slot
    接收到信号之后,调用的函数

一句话总结:信号槽是对象之间的信息通讯的方式


2. 标准信号槽的使用


这里以一个实际的案例,来演示信号和槽的使用

案例:点击对应按钮,实现窗口的最大化/最小化/正常显示窗口,和关闭窗口

案例


2.1 新建工程

按照之前的讲解,一步步新建一个窗口工程


2.2 界面布局

界面布局

  • 放置按钮并布局
    放置4个按钮;
    选中窗口,点击工具栏的【水平布局】,进行布局(这样可以对齐并且自适应窗口大小的变化);
    在左右两侧各放一个 Horizontal Spacer(避免按钮太大,影响美观);
  • 见名知意
    修改窗体的标题为 “标准信号槽-演示”;
    放置4个按钮显示的文字,以及 name

2.3 连接信号槽

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 连接信号和槽
    connect(ui->btnMax, SIGNAL(clicked()), this, SLOT(showMaximized()));
    connect(ui->btnNormal, SIGNAL(clicked()), this, SLOT(showNormal()));
    connect(ui->btnMin, SIGNAL(clicked()), this, SLOT(showMinimized()));
    connect(ui->btnClose, SIGNAL(clicked()), this, SLOT(close()));
}

这样,点击按钮,就实现了预期的功能!


2.4 拓展:快捷键

  • 向前复制当前行: ctrl + alt + up (向上箭头)
  • 向后复制当前行:ctrl + alt + down (向下箭头)

在使用这两个快捷键时:按住 ctrl + alt +箭头,可能与系统图形的快捷键冲突, 导致在 Qt Creator 中无法使用

解决办法:
大多数人使用的是因特尔的核心显卡,则用如下方法:

  • 右键点击桌面空白处 -> 图形选项 -> 快捷键 ->禁用,就OK了。
  • 或者,点击图形属性 -> 找到 ctrl+alt+upctrl+alt+down,禁用掉就好了,如下:
    快捷键冲突

什么时候会用到屏幕旋转
如果你是程序员,并且有另外一台外接显示器,把显示器变成竖屏模式可以省去频繁鼠标滚轮滚动,从而提高代码查看的效率


本节对应的视频讲解:B_站_链_接
https://www.bilibili.com/video/BV1vW4y1676Q


  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 九、Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十九、Qt 2D绘图(九)双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十九、Qt数据库(九)XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十九、QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大轮明王讲QT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值