qt学习笔记2:信号和槽

2023-11-16

信号和槽 - 实现点击按钮关闭窗口

按钮–>点击 --> 窗口–>关闭
connect(信号的发送者,发送的具体信号,信号的接收者,信号的处理)信号的处理就是
一个是信号的发送方, 一个是信号的接收方,信号槽有一个优点:松散耦合,即发送方和接收方本身是没有关联的,是通过connect连接将两端耦合在一起。
在这里插入图片描述

信号通过帮助文档去查看,到底是从哪个类中去继承的,这里click这个信号是从QPushButton中来,同理槽函数
当然也可以从myPushButton中去得到click这个信号,从QWidge中得到close这个槽

自定义的信号和槽

需求:下课后,老师触发一个信号,饿了,学生响应信号,请客吃饭
新建项目,添加新文件,定义类,由于老师和学生都不是自定义的控件,所以继承最高的QObject
在这里插入图片描述在这里插入图片描述
自定义的头文件长这样
在这里插入图片描述

自定义的信号 写到signals下面
老师的信号(函数)就是, 老师会饿, 那写个hungry的函数, 信号函数规定返回值为void类型,signals函数不需要实现,可以有参数可以重载

在这里插入图片描述
到了学生方,老师发出信号,学生方接收函数
在这里插入图片描述
接收函数肯定不会写到signals下面,在早期版本必须要写道public slots下面,之后的版本可以写到piblic下或者全局下,slots函数要求返回值, 需要声明也需要实现,可以有参数也可以发生重载

老师发出饿了的信号,学生接收,就会作出”请客“的响应

在这里插入图片描述
.cpp中实现
在这里插入图片描述
回到窗口中
在这里插入图片描述
这边新出现的ui相关的代码是因为在新建文件的时候,忘记关闭可以创建控件的勾勾,不过没有影响,不去删它相关代码就好了。初期先不学这个。

先创建老师的一个对象,再创建学生的对象,现在.h中声明出来这两个对象, 再在构造函数中进行初始化,都给这两个对象声明父窗口。有了对象之后要给这两个对象进行连接,
在这里插入图片描述
这个时候, 对项目进行构建运行,会发现没有什么都没打印;这是因为信号的发送者还没有发送信号,老师会在下课后饿,不会一直饿着,所以没有下课后这个条件,就不会触发老师饿了的这个状态

因此可以再写一个私有的下课的方法
在这里插入图片描述

实现并调用它
在实现中需要用emit关键字去触发信号
在这里插入图片描述
这时运行可以看到槽函数的打印
在这里插入图片描述

整个小总结

  1. 自定的信号:返回void,需要声明不需要实现,可以有参数,可以有重载
    写到signal
  2. 自定义的槽函数:返回void,需要声明,也需要函数,可以有参数,可以有重载
    可以写到public slot下,或者public或全局下
  3. 触发自定义的信号emit, 需要有函数来触发信号,

自定义的信号和槽发生重载的解决

老师重载:
在这里插入图片描述

学生也重载并实现:

在这里插入图片描述
在这里插入图片描述
对应下课结束可以触发两个状态,带名字和不带名字的

在连接处,connect函数无法通过函数地址来判断到底是带参数的还是不带参数的
===>
用函数指针指向函数地址
在这里插入图片描述

结果顺利调用到有参函数部分
在这里插入图片描述
但这边的fish的引号也一并打印出来了,如何去掉引号呢, 以字符串char*输出
在这里插入图片描述

这就没有引号了,先通过utf8转成QByteArray, 再通过.data()转成char*

这部分小结

当自定义信号和槽出现重载,需要利用函数指针明确指向函数的地址,用void (Teacher::sSignal)(QString) = &Teacher::hungry

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt学习笔记2:信号和槽 的相关文章

  • 除了内存管理之外,QObject 的父对象还用于什么?

    我知道 当一个QObject http doc qt io qt 5 qobject html被摧毁了 它也摧毁了它所有的孩子 但是 在我最近的所有 Qt 代码中 我总是声明任何类的成员 例如 QMainWindow https doc q
  • QOpenGLFunctions 缺少重要的 OpenGL 函数

    QOpenGLFunctions 似乎缺少重要的函数 例如 glInvalidateFramebuffer 和 glMapBuffer 据我了解 QOpenGLFunctions 加载桌面 OpenGL 函数和 ES 函数的交集 如果是这样
  • Qt QML ComboBox 覆盖滚轮事件

    有没有办法覆盖 ComboBox MouseArea 以忽略滚轮事件而不是更改当前索引 ComboBox 本身没有选项可以更改滚轮焦点行为 到目前为止 我尝试使用如下代码覆盖 CB MouseArea 的 onWheel ComboBox
  • Qt 的最佳实践包括和预编译头文件?

    当使用现代和最新的 C 编译器 例如 MSVC2015 并激活预编译头时 当前关于包含 Qt 头文件的 最佳实践 是什么 Example include
  • QWebView / Qt WebKit 不会打开某些 SSL 页面;不允许重定向?

    在带有 Visual C 2008 SP1 的 Windows 7 上全新安装 Qt SDK 1 1 4 我正在使用 Qt Creator 为什么此代码无法加载某些网页 include
  • Qt 中的 QRadioButton 选中/取消选中问题

    我发现与选中 取消选中 QRadioButton 相关的问题 我用于检查 白点 和取消检查 没有白点 的图像未更新 我的问题是 我已经实现了一些 QRadioButton 第一次所有 QRadioButton 都检查为 false 因此 本
  • 使用 Qt 在 xoverlay 之上绘制

    我希望在使用 Xoverlay 渲染的视频流之上绘制一些 UI 我正在使用 gstreamer 播放视频并使用 xoverlay 在 xvimagesink 上渲染它 我的小部件继承自 QGLWidget 我希望使用 QPainter 绘制
  • Qml 中的 FileDialog 在发布中不起作用

    我正在与以下项目合作Qt Quick Control 2 当我尝试在调试模式下运行软件时 FileDialog qml 可以完美打开 但是当我将其部署为发布模式时 它无法工作 这是我的代码 import QtQuick 2 4 import
  • 无法将 QMap 传递到 SLOT

    所以 这有效 h public slots void addMenu QString passedName signals void clicked const QString text cpp signalMapper new QSign
  • Qt Designer 与手动编码

    每次我使用图形工具包开始一个项目时 第一个冲突就会发生在如何处理视觉设计和小部件布局的决定上 图形工具还是手动编码 这是一个非常棘手 主观的问题 因为大多数人会根据个人喜好来决定 它还很大程度上取决于图形工具的质量 在这种情况下 我想只关注
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • 检查目录是否为空

    我正在尝试检查目录是否为空 MainWindow MainWindow QWidget parent QMainWindow parent ui new Ui MainWindow ui gt setupUi this QDir Dir h
  • 获取小部件的背景颜色 - 真的

    我无法获取小部件的实际背景颜色 在我的特殊情况下 我在使用 QTabWidget 中的小部件时遇到问题 这是在Windows7上 因此 经典的小部件有一些灰色背景 而选项卡内的小部件通常用白色背景绘制 I tried def bgcolor
  • QT 中的应用程序->处理消息?

    在 Borland 6 中 我经常使用它来解除程序操作的卡住 Application gt Processmessages 现在 对于 QT 4 8 1 我在这个外国 对我来说 QT 文档中找不到 谁能帮我 在 Qt 中 您可以使用静态函数
  • 对齐坐标系

    Let s say I have 2 coordinate systems as it is shown in image attached 如何对齐这个坐标系 我知道我需要将第二个坐标系围绕 X 平移 180 度 然后将其平移到第一个坐标
  • QToolBar 的菜单延迟

    我通过制作 QAction 并向其添加 QMenu 在 QToolBar 上有一个菜单 如何消除单击图标时出现菜单之前的延迟 QToolBar myToolBar new QToolBar this QAction myAction new
  • QLineEdit:显示处理后的文本,而不是输入的文本,但保留它(自定义回显模式)

    我想要一个QLineEdit不显示输入的文本 而是显示经过处理的版本 同时保留原始文本并在通过请求时返回它text 就像密码回显模式一样 但我不希望每个字符都被屏蔽 我想虚拟化空间 例如什么时候some text with spaces i
  • qt项目如何设置安装路径

    我正在寻找与 qmake configure prefix 等效的内容 基本上 我想覆盖默认的安装 部署目录 这是如何用命令行 qmake 指定的 我还使用 QtCreator 构建了很多 gui 项目 并且我想知道如何在 QtCreato
  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali

随机推荐

  • Python之Lock锁

    python中的锁lock threading Lock 避免多个线程保卫同一块数据的时候 产生错误 所以加锁来防止这种问题 import threading import time from queue import Queue def
  • react在不弹出eject的情况下配置sass和antd

    天气越来越热 公司的业务也慢慢放缓 这时候就有空暇时间为自己充点电了 然后就把目标放在了react上 公司的前端技术框架用的是vue 对react早就如雷贯耳 然后自己看了文档就劈里啪啦开始搞 在用create react app脚手架搭建
  • 竞赛 基于RSSI的室内wifi定位系统

    0 前言 优质竞赛项目系列 今天要分享的是 wifi室内定位系统 该项目较为新颖 适合作为竞赛课题方向 学长非常推荐 学长这里给一个题目综合评分 每项满分5分 难度系数 3分 工作量 3分 创新点 4分 更多资料 项目分享 https gi
  • new Date() 日期格式的转换

    let date new Date date getFullYear 获取年份 格式1970年 date getMonth 获取当前年的月份 月份要 1 0代表1月 date getMonth 1 date getDate 获取当前日 1
  • 手写数字识别 (tensorflow==2.4.0)

    import tensorflow as tf from tensorflow import keras fashion mnist keras datasets fashion mnist train images train label
  • 使用jQuery操作input的value值

    表单控件是jQuery的重中之重 因为一旦牵扯到数据交互 就离不开form表单的使用 比如用户的登录注册功能等 在进行操作input的value值的时候 主要使用jQuery的val 方法 点击查看val 的使用方法 看如下代码
  • CGIC文件上传----菜鸟笔记

    CGIC上传文件 一 如何利用CGIC上传自己的文件 原理 当在浏览器点击 提交 表单时候 就会上传文件内容并调用你所编写cgic程序 然后靠cgic代码保存你文件 html代码如下
  • CVPR 2021 Sequential Graph Convolutional Network for Active Learning

    深度学习在计算机视觉方面展现出非常大的进步 其代价是大规模的标注数据集 数据标注是耗时的 需要人工和雇佣成本 在许多领域 数据标注更具挑战性 如医学成像领域 此外 在优化深层神经网络架构时 数据的代表性存在差距 为了克服这些问题 主动学习已
  • HTTP协议之Libcurl

    目录 转载 https www cnblogs com xietianjiao p 13260021 html 一 libcurl简介 二 libcurl的使用 三 libcurl等第三方库的通用编译方法 四 调用libcurl编程访问百度
  • Elasticsearch(八)搜索优化

    Elasticsearch 6 4 2 1 理解字段分析过程 一个常被问到的问题是 为什么指定的文档没有被搜索到 很多情况下 这都归因于映射的定义和分析例程的配置存在问题 针对分析过程的调试 Elasticsearch提供了专用的REST
  • h5py存取简例

    当数据太大 好像是 gt 2G scipy io savemat 会报错 考虑换用 h5py 这种格式 matlab 也可以读 见 4 Code import numpy as np import h5py a np arange 12 r
  • SiamMask 测试程序分析

    之前分析了 DaSiamRPN 的测试代码 侧重于执行细节 到了 SiamMask 似乎主题应该有所升华 故事的明线为跟踪器构成 暗线为训练流图 相比于 DaSiamRPN SiamMask 不仅网络结构是现代化的 系统设计也更具匠心 这便
  • MATLAB——参数根轨迹的绘制

  • C# 接口(Interface)

    简介 接口定义了所有类继承接口时应遵循的语法合同 接口定义了属性 方法和事件 这些都是接口的成员 接口只包含了成员的声明 成员的定义是派生类的责任 接口提供了派生类应遵循的标准结构 接口使得实现接口的类或结构在形式上保持一致 抽象类在某种程
  • 双fifo流水线实现3x1024数组数据按列相加

    Vivado版本 2019 2 MATLAB Modelsim版本 Modelsim SE 64 10 7 实验内容 双fifo流水线实现3x1024数组数据按列相加 FIFO First Input First Output 既先入先出
  • 小程序 云函数中file转base64

    mp4文件转base64 云函数中下载文件 const res await cloud downloadFile fileID fileID const base64 data video mp4 base64 res fileConten
  • 计算机编程语言:解释型语言与编译型语言的理解

    一 计算机编程语言 主要分为3类 高级语言 抽象层次更高的便于记忆和表示的英文代码 汇编语言 抽象层次较高的对应机器硬件的cpu指令集 英文缩的助记 符号代码 机器语言 抽像层次最低的由0 1序列所表示的机器码 计算机底层只能识别0 1 所
  • TIMIT数据集无法打开?sph格式转换为wav

    打开TIMIT数据集发现提示无法打开文件 上网搜索发现文件虽然后缀是WAV 但是其实是sph格式 是无法打开的 需要转换为wav 找到一种python方法转换格式 但是不知道为什么sphfile库下载安装了就是无法引用 然后又找到了一个ma
  • Linux 安装Zookeeper

    Linux 安装Zookeeper 下载 wget https mirrors tuna tsinghua edu cn apache zookeeper zookeeper 3 4 14 解压 tar zxvf zookeeper 3 4
  • qt学习笔记2:信号和槽

    信号和槽 实现点击按钮关闭窗口 按钮 gt 点击 gt 窗口 gt 关闭 connect 信号的发送者 发送的具体信号 信号的接收者 信号的处理 信号的处理就是槽 一个是信号的发送方 一个是信号的接收方 信号槽有一个优点 松散耦合 即发送方