Qt 中的 SIGNAL 和 SLOT 宏:它们的作用是什么?

2023-11-24

我是 Qt 的初学者并试图理解SIGNAL and SLOT宏。当我学习使用connect绑定信号和槽的方法,我发现Qt官方参考页上的教程使用:

connect(obj1, SIGNAL(signal(int)), obj2, SLOT(slot()))

然而,这也非常有效:

connect(obj1, &Obj1::signal, obj2, &Obj2::slot)

那么宏到底是做什么的SIGNAL and SLOT做?他们只是在对象所属的类中查找信号并返回它的地址吗?

那么为什么大多数程序员使用这些宏而不是使用&Obj1::signal因为后者看起来更简单,并且如果信号函数的参数发生变化,您不需要更改代码?


使用SIGNAL and SLOT在 Qt 5 之前,宏曾经是建立连接的唯一方法。连接是在运行时建立的,需要在标头中标记信号和槽。例如:

Class MyClass : public QObject
{
    Q_OBJECT
    signals:
        void Signal();

    slots:
        void ASlotFunction();
};

为了避免重复,描述了它的工作方式在 QT 4 文档中.

信号和槽机制是 Qt 提供的 C++ 扩展的一部分,并利用元对象编译器 (moc).

This解释了为什么信号和槽使用 moc。

第二种连接方法得到了很大的改进,因为可以在编译时而不是运行时检查指定的函数。此外,通过使用函数的地址,您可以引用任何类函数,而不仅仅是标记部分中的函数slots:

The 更新了 Qt 5 的文档.

此外,还有一篇关于 Qt 4 连接工作原理的好博客文章here和 Qt 5here.

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

Qt 中的 SIGNAL 和 SLOT 宏:它们的作用是什么? 的相关文章

  • QT从QTableWidgetItem继承到Widget并覆盖'<'运算符

    我想要一个QTableWidget具有定制的某些单元QProgressBars 并且我希望能够对包含这些的列进行排序 我的定制QProgressBar继承自两者QProgressBar and QTableWidgetItem 并且我正在覆
  • 从 Qt4 中的文本文件中逐字读取

    我想在 Qt4 中逐字读取一个文本文件 说实话我对它很陌生 我想在另一个文件中每行一个字写入 我可以在 C 中做到这一点 没有任何问题 但是当我尝试在 Qt4 中使用 ifstream 和 ofstream 时 我遇到了错误 这是我的 Qt
  • Qt 是否已经有了自己的 new 和 delete 运算符?

    我正在使用一个QGraphicsScene小部件并在其上显示一些点QGraphicsRectItem 这意味着要拨打很多电话new addItem 当出现时 并且removeItem delete摆脱未使用的点 当然 对于性能问题 我已经实
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • Qt - 获取互联网上托管的网页的源代码(HTML 代码)

    我想获取网页的源代码 HTML 例如StackOverflow的主页 这是我到目前为止编写的代码 QNetworkAccessManager manager QNetworkReply response manager get QNetwo
  • 静态变量中的 qt tr()

    我在 qt 中的翻译方面遇到问题 我的项目中的所有翻译都工作正常 但有一个翻译位于类的静态变量中 相应部分代码如下 头文件类似于这样 typedef struct int type QString problematicString inf
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 在 clojure 中,使用递归实现宏时如何进行代码模板化

    我正在尝试实现一个宏 以递归地将中缀列表转换为前缀列表 我遇到一个问题如下 this works defmacro recursive infix form list second form first form if not seq nt
  • 使用 Qt 的网络服务

    我正在寻找使用 Qt 服务器端 实现 Web 服务的代码 如果您有任何信息 我将不胜感激 Regards 您可以使用libqxt http libqxt bitbucket org doc 0 6 qxtweb html实现服务器端Web服
  • Qt:删除富文本

    对于明文有QFontMetrics elideText https doc qt io qt 5 qfontmetrics html elidedText https doc qt io qt 5 qfontmetrics html eli
  • 使用嵌入qt的mysql?

    我正在尝试使用嵌入 QT 的 mysql 我已经有一个与 mysqld 链接的 Qt mysql 插件 该插件可以很好地加载嵌入式数据库 但 QT 没有简单的方法来设置 dataDir 等嵌入式选项 我在这里看到 http doc qt i
  • 当从 html 文件读取 Unicode 内容时,为什么 Unicode 字体在 QTextBrowser 中无法正确显示?

    我正在读一本html文件 该文件基本上包含Unicode案文如下 b akko sati kru akkh ti khy abbahati b h b But the QText浏览器不解释Unicode字体 所以QText浏览器显示如下
  • perl - 子进程向父进程发送信号

    我编写了以下代码来测试孩子和父母之间的信号传递 理想情况下 当子进程向父进程发出 SIGINT 时 父进程应该在新的迭代中返回并等待用户输入 我在 perl 5 8 中观察到了这一点 但在 perl 5 6 1 我被要求使用 中 父级实际上
  • 如何在 Qt simple 上解密/加密某些字符串(例如密码)

    这是我得到的 Qt SDK版本4 6 2 视窗XP 问题 我怎样才能简单地加密和简单地加密QString价值 我需要它能够将一些加密的字符串保存到 INI 文件中 并在重新打开应用程序后将字符串加密为正常的密码字符串值 PS 我正在寻找简单
  • 对c中宏SQR的平方感到困惑[重复]

    这个问题在这里已经有答案了 这个问题是在模拟面试中问我的 真的很惊讶地发现尴尬的答案 考虑一个宏 define SQR x x x 示例1 SQR 2 prints 4 示例2 如果给出 SQR 1 1 则它不会求和 1 1 to 2反而
  • QChart 对大数据集无响应

    我的这段代码适用于高达 1000 的数据大小 现在我用 65536 个点对其进行了测试 series new QLineSeries QList
  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始

随机推荐

  • 当参数类型为开放Char数组时,是否允许使用动态Char数组?

    我在看Delphi Char 和 TCharArray 不兼容类型 数组并开始尝试 我的发现相当有趣 procedure Clear AArray array of Integer var I Integer begin for I Low
  • 如何在android中将EditText提示创建为带有图像的文本

    如何在 android 中使用文本和图像创建 EditText 提示 占位符 我这样写
  • xargs sh -c 跳过第一个参数

    我正在尝试编写一个使用 find 和 xargs 将旧文件存档在大目录中的脚本 这是该行 find tmp messages mtime 9 print0 xargs x t 0 n 1000 sh c tar rPf tmp backup
  • 如何允许覆盖 ASP.NET Core 应用程序中的 blob?

    用户可以在创建记录时上传图像 但当您编辑该记录并尝试上传新图像时 会出现 此 blob 已存在 错误 有没有办法可以在我的应用程序中启用同名 blob 的覆盖 这是我处理更新过程的代码 值得注意的是 我创建了图像的三个迭代 为了应用程序的缘
  • Alexa Top 10000 SitesTop Sites 2023 - 2023最新刚更新 全世界流量排名10000的网站

    这个问题在这里已经有答案了 我使用 PhpDocumentor2 来生成文档 我搜索了这个主题 但找不到它的具体规则 例如 我有一个名称为 AddressField 的类 我想将 addressFields 指定为 AddressField
  • Rails:验证链接 (URL) 的好方法是什么?

    我想知道如何最好地验证 Rails 中的 URL 我正在考虑使用正则表达式 但不确定这是否是最佳实践 而且 如果我要使用正则表达式 有人可以向我推荐一个吗 我对正则表达式还是新手 验证 URL 是一项棘手的工作 这也是一个非常广泛的要求 你
  • 如何在Unity中对网格进行布尔运算?

    I have Cube模型和Cylinder模型 我想在里面打个洞Cube by Cylinder 我怎样才能做到呢 我有这两个模型 我想做这个 This is 网格上的布尔运算 Use this线程以了解更多信息 这是来自的存储库GitH
  • 新项目有什么理由使用 log4j 而不是 Logback? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我知道共同意见是 Logback gt log4j 不过 log4j 有什么比 Logback 更好的地方吗 有什么理由使用 log4j 而不是 logback 事实上它只有 60 个关于
  • Google Play 应用更新 - 无法发布新的 apk

    当我尝试在 Google Play 中发布新的 APK 时 出现以下错误 禁止将之前使用M权限 目标SDK 23及以上 的设备降级为使用旧式权限 目标SDK 22及以下 的APK 从版本 2645 目标 SDK 23 到版本 2648 目标
  • 如何在 Android 中获取类似波形的声音云

    我用我的代码生成了一个简单的波形 如下图所示 但我想在每条线之间留出更多间隙 我希望它像声云波一样 如下图所示 这是我的代码 public class VisualizerView extends View private static f
  • 使用 XOR 在 JavaScript / HTML5 中绘图以删除旧的精灵

    我正在为一个小游戏构建引擎 现在我刚刚得到了一个带有两只小眼睛的红色圆圈作为主角 我有keyPress函数来检测运动 这很有效 但我想使用我很久以前在 QBASIC 中使用过的东西来删除角色并在新位置重画 XOR 基本上 在按键时会发生这种
  • Spring安全注销处理

    根据春季安全4 0 0文档 4 2 4 注销处理 logout 元素添加了对通过导航到注销的支持 特定的网址 默认注销 URL 是 logout 但你可以设置它 使用 logout url 属性进行其他操作 更多信息 其他可用的属性可以在命
  • 是否可以在卸载前弹出窗口中显示自定义消息?

    使用时window onbeforeunload or window on beforeunload 是否可以在该弹出窗口中显示自定义消息 也许是一个适用于主流浏览器的小技巧 通过查看现有的答案 我感觉这在过去使用类似的东西是可能的conf
  • 使用 Filesaver.js 保存 Base64 图像

    我收到 JPG 图像的多个 Base64 URI 我需要将它们保存为 jpg 文件 我正在尝试使用文件保存器 js 但它不适合我 我之前使用过filesaver js 当时我从aws sdk获取图像 其中数据是缓冲区形式并且它有效 但是 它
  • 在Python中重新分配变量[重复]

    这个问题在这里已经有答案了 我有以下代码和变量 我想找到变量是什么a a1 a2 b b1 and b2代码执行后参考 def do something a b a insert 0 z b z b a a b c a1 a a2 a b
  • 在 ASP.NET Core 中检测移动设备

    我有一个应用程序 它使用移动视图和桌面视图作为不同的 html 页面 现在我将其转移到 Asp Net core 由于一些技术原因 我没有考虑 Bootstrap 我必须检测请求是来自移动设备还是不在启动中才能加载相应的布局页面 我怎样才能
  • Typescript+webpack:Typescript 没有发出 index.d.ts 的输出

    我跟着本教程成功设置 typescript webpack 无反应 一切都很好 直到我将 index d ts 文件添加到我的组件文件夹中 我用它来导出所有模块 例如 export from MyClass1 export from MyC
  • Java Swing:库、工具、布局管理器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 您的 Java Swing
  • Python的复杂度是subset()

    给定两个集合 A 和 B 及其长度 a len A 和 b len B 其中 a gt b Python 2 7 的 issubset 函数 即 B issubset A 的复杂度是多少 我从网上找到了两个相互矛盾的答案 1 O a 或 O
  • Qt 中的 SIGNAL 和 SLOT 宏:它们的作用是什么?

    我是 Qt 的初学者并试图理解SIGNAL and SLOT宏 当我学习使用connect绑定信号和槽的方法 我发现Qt官方参考页上的教程使用 connect obj1 SIGNAL signal int obj2 SLOT slot 然而