当前位置: 首页 > news >正文

Qt按键响应

信号与槽机制是一个非常强大的事件通信机制,是 Qt 最核心的机制之一,初学者掌握它之后,几乎可以做任何交互操作。

信号(Signal) 是一种“事件”或“通知”,比如按钮被点击、文本改变、窗口关闭等。
槽(Slot) 是一个“处理函数”,用于响应信号。

当信号发生时,自动调用连接的槽函数,实现逻辑响应。

简单的信号与槽构建示例

+-构建

如果你的栏布局与主包一样,如下

在黑框右键,点击“重置为默认布局”,就能出现如下“+”“-”号

点击“+”号,双击(<发送者>等)输入内容,示例为点击打开按钮,就关闭窗口 

点击要删除的命令,再点击“-”号就能删除

Edit Signals块

我觉得使用相对麻烦,就不详细介绍了,大家可以不学这种。

 点击符号后,将鼠标放在对象上会变红,点击要选择的信号发送者

点击后会由对象伸出一条红色的单项箭头,点击要选择的接收者,选择发送者发出的信号和接收者的响应操作

点击左边的Edit Widgets退出编辑操作

代码方式实现

ui+代码

右键按钮,点击“转到槽”

选择信号,点击“OK”

就跳转到了widget.cpp文件,会自动生成相关槽函数,.h文件也会增添相应声明

我们可以在槽函数里输出一句话(记得在.h文件增添头文件<iostream>),保存

点击“打开”按钮后出现如下输出

QObject::connect函数

在构造函数中进行信号与槽的绑定

打开widget.cpp,输入如下连接代码

QObject::connect(发送者,SIGNAL(检测信号),接收者,SLOT(超函数));

this代表这个窗口 ,SLOT()超函数需在头文件声明

函数实现

声明后右键函数,点击“Refactor”,点击“在widget.cpp中添加定义”

在跳转后的widget.cpp中的生成函数中输入如下代码

点击“关闭”按钮后,输出如下

 lambda表达式

也可以直接写lambda表达式,就不用声明函数了(是匿名函数),接收者this要不需要写,默认为窗体本身

点击“保存”键后输出如下

 使用函数指针

与使用connect函数构建相似,不再赘述,给出widget.cpp文件中的代码

QObject::connect(ui->Bclose,&QPushButton::clicked,this,&widget::on_fortch_clicked);

自定义信号与槽

先在.h头文件声明信号,声明槽(红杠处为添加部分) 

在.cpp文件中实现槽函数

QDebug是Qt中用于输出调试信息的类,提供了一种方便的方式来输出文本到标准输出,返回一个QDebug对象,使用流操作符<<输出各种数据类型,与cout使用类似

需在.h中引入<QDebug>头文件

在.cpp的构造函数中连接信号与槽(connect前面可以声明QObject也可以不写,因为Widget是QObject的派生类,可使用基函数的成员函数)

再使用emit关键字触发信号,输出如下

带参数

.cpp代码如下

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(this,SIGNAL(mysignal(int)),this,SLOT(myslot(int)));emit mysignal(100);
}Widget::~Widget()
{delete ui;
}void Widget::myslot(int value)
{qDebug()<<"myslot";qDebug()<<value;
}

运行结果如下

虽然我们约定信号与槽的形参要一样,但是参数不一样在Qt中其实也允许发生 

http://www.xdnf.cn/news/1243387.html

相关文章:

  • 倒排索引:Elasticsearch 搜索背后的底层原理
  • 【C语言】自定义类型:联合体与枚举
  • SpringMVC在前后端分离架构中的执行流程详解
  • 句子表征-文本匹配--representation-based/interactive-based
  • MS-DOS 常用指令集
  • 机器学习——学习路线
  • 2.Java和C++有什么区别
  • Demo-LangGraph构建Agent
  • 【Spring】SpringBoot 自动配置,@ComponentScan、@Import、ImportSelector接口
  • LeetCode 132:分割回文串 II
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(下)【make/Makefile】
  • 水面垃圾清扫船cad【6张】三维图+设计说明书
  • Jmeter进行性能并发测试
  • 【Java】使用FreeMarker来实现Word自定义导出
  • C++高频知识点(十四)
  • 京东商品详情API技术文档框架及Python实现方案
  • sqli-labs:Less-27a关卡详细解析
  • 《Python 实用项目与工具制作指南》· 2.3 导入
  • Bean的生命周期和循环依赖问题的解决
  • curl发送文件bodyParser无法获取请求体的问题分析
  • 嵌入式硬件中三极管推挽电路控制与实现
  • PPT自动化 python-pptx - 11 : 备注页 (Notes Slides)
  • (论文速读)Text-IF:基于语义文本引导的退化感知交互式图像融合方法
  • sqli-labs-master/Less-31~Less-40
  • openeuler离线安装软件
  • Hexo - 免费搭建个人博客07 - 添加右上角的“目录”
  • 先知模型或者说从容的模型
  • Linux—yum仓库及NFS网络共享服务
  • Java基础-斗地主游戏
  • opencv引入libavif