Qt中关于emit和moc_*.cpp的自动生成

2023-11-03

关于Qt中的emit()函数

直接查看emit的定义

#define emit

  可以发现emit仅仅是个宏定义符号,编译器宏替换后就是个"空白",根本就不会编译它。
所以代码里完全可以去掉这个符号,反之也可以在任何代码前加上这个符号,如这行代码emit reurn;编译的时候也不会有任何错误。
  下面的发送信号语句,从c++语法上讲就是调用xxx(…)函数

emit xxx ( ...) ;

  上面代码和只写:xxx(...);编译结果是一样的。
  至于定义emit符号的意义,猜想是让编程者知道这个定义要发送信号了。

关于Qt中自动生成的moc_*.cpp

  moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,moc 的执行是在预处理器之前,因为预处理器执行之后,Q_OBJECT 宏就不存在了。

使用emit和实现发送的信号

eg.
①在.h中声明信号:

signals:
	void display_image(std::shared_ptr<Camera::ImageInfo> image_info);

②在.cpp中发送信号

emit display_image(image_info);

③通过绑定信号和槽函数,来实现要完成的动作。

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

Qt中关于emit和moc_*.cpp的自动生成 的相关文章

  • 如何在不同的QT线程中创建一个窗口?

    我有一个应用程序 其中每个线程 主线程除外 都需要创建自己的窗口 我尝试创建一个线程然后调用this gt exec in the run功能 然而 在我接到那个电话之前我就收到了一个错误 ASSERT failure in QWidget
  • 在Qt中,如何正确实现委托?

    我遵循模型 视图 控制器范例 我很确定模型和视图是正确的 但我认为我的代表做错了一些事情 一切都 有效 除了第一次单击控件只是 点亮控件 而第二次单击与之交互之外 这是代表通常的实施方式吗 我的实现需要大量的构造和销毁 由scoped pt
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • 为什么anchors.centerIn不适用于Column元素?

    我有这段 QML 代码 Column spacing units gu 2 anchors fill parent centerIn parent Row spacing units gu 4 Row spacing units gu 4
  • 构建qt程序时未定义的符号:找不到qt_version_tag

    我正在学习Qt5 6 我正在使用 Ubuntu 14 4 当我链接我的程序时 出现以下错误 undefined reference to qt version tag 在 CMakeLists txt 中 link libraries Qt
  • Qt QML MenuItem iconSource不显示

    我有一个非常简单的设置只是为了说明问题 import QtQuick Controls 1 4 import QtQuick Window 2 2 ApplicationWindow visible true width 640 heigh
  • QtWebEngine Quicknano 在嵌入式 Linux 中没有声音

    我已将 QtWebEngine 编译到我的 i MX6 嵌入式设备中 当我尝试使用 Quicknanobrowser 播放 YouTube 视频时 视频会播放 但没有声音 事实上 当我尝试播放音频文件时没有声音hpr dogphilosop
  • 在 Qt 中创建/写入新文件

    我正在尝试写入文件 如果该文件不存在 则创建它 我在互联网上搜索过 但没有任何效果 我的代码目前看起来像这样 QString filename Data txt QFile file filename if file open QIODev
  • 使用 QPrinter 打印第 x 页(共 y 页)

    我使用 qt 从 html 代码生成 pdf 文件 QTextDocument document new QTextDocument document gt setHtml htmlContent QPrinter printer QPri
  • 通过隔离范围进行 AngularJS 基于事件的通信

    在 AngularJS 中 一个指令如何使用基于事件的通信 emit broadcast and on 与另一个具有隔离范围的指令进行通信 我创建了两个指令 当从第二个指令中删除隔离范围时 第一个指令能够使用emit 与第二个指令成功通信
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla
  • 将 QMAKE_CXXFLAGS += -std=c++11 添加到 qt 中的 .pro 文件不起作用(在 linux 12.04 上)

    编译器输出 main o 错误 1 cc1plus 错误 无法识别的命令行选项 std c 11 解决方案是更新系统上的旧 gcc 版本 事实上 我很惊讶你的 12 04 Ubuntu 变体上有这么旧的版本 默认情况下应该有 4 6 3 您
  • 如何在 PySide/PyQt 中制作一个位于屏幕中央的小部件?

    这段代码有效 但我想知道是否有更简单的方法 def center self qr self frameGeometry cp gui QDesktopWidget availableGeometry center qr moveCenter
  • 关于在 Qt 中使用未记录的类

    使用无证文件是否安全QObjectUserData类和QObject setUserData in Qt 相反 你可以看看使用QObject setProperty http doc qt io qt 5 qobject html setP
  • 使用 QSet 作为 Qt 地图容器中的键

    我需要一个映射 其中键是唯一的 并且每个键都是一组或自定义 POD 结构 其中包含 3 个数据项 这些值只是指向对象实例的指针 从阅读Qt 的 QMap 与 QHash 的文档 http qt project org doc qt 4 8
  • 带 Qt 的菜单栏/系统托盘应用程序

    我是 Qt PyQt 的新手 我正在尝试制作一个应用程序 其功能将从菜单栏 系统托盘执行 这里展示了一个完美的例子 我找不到关于如何做到这一点的好资源 有人可以建议吗 Thanks 我认为您正在寻找与QMenu and QMainWindo
  • 如何通过 Qt 创建网络服务 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 加载 QPixmap 数据的更好方法

    更好的方法来做到这一点 没有QImage QImage image width height QImage Format RGB888 memcpy image bits m frameRGB gt data 0 height width

随机推荐

  • 工业机器人用什么语言编程

    曾经有很多小伙伴一直问 工业机器人编程用的是什么语言啊 这次就给大家总结一下工业机器人常用的几种编程语言 1 硬件描述语言 HDLs 硬件描述语言一般是用来描述电气的编程方式 这些语言对于一些机器人专家来说是相当熟悉的 因为他们习惯FPGA
  • 创建空列表遇到的问题-RF

    正确的方法 使用Create List 后面为空即可 其他错误的操作 转载于 https www cnblogs com apple2016 p 5889449 html
  • pysyft安装建议

    安装方案 前置需求 需要安装了 conda 环境管理工具 可以通过安装 miniconda或者 Anaconda 实现 安装流程 根据官网 1 推荐的流程做了一些修改 改变Python版本为3 7 conda create n pysyft
  • xlwings删除数据_xlwings如何删除行和列?

    import xlwings as xw sht 2 2 delete 删除行 sht 1 2 delete 区域切片的方法 sht B B delete 删除列 sht 1 2 delete sht B2 delete 删除单元格 缺省默
  • 如何操作代码托管到GitHub

    先进入个人主界面 大概在页面右下角有个 New repository按钮 如上图 点击来创建一个版本库 这里将版本库命名为 你的项目名 我的是android项目 然后选择添加一个Android项目类型的 gitignore文件 并使用Apa
  • python设置excel表头_python xlsxwriter:添加表时将标头保留在Excel中

    I have a panda dataframe that I write to a xslx file and would like to add a table over that data I would also like to k
  • 【LeetCode刷题】136、只出现一次的数字 - java

    题目 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 说明 你的算法应该具有线性时间复杂度 你可以不使用额外空间来实现吗 示例 方法 方法一 排序遍历法 先将其进行排序 因为重复的只可能
  • Linux命令操作:用sort和awk命令,进行复杂条件过滤

    原文 https www toutiao com i6968352645211963941 多 浩如烟海 参数之杂 多如繁星 需求引导 用到再学 以使用为目的 适当延伸 是一个最实际最有效的办法 某天 我突然想生成一个文件 记录 dev下的
  • 输入三个坐标,判断三角形,并输出面积和周长。

    include
  • MySQL的索引

    什么是索引 索引是一种特殊的文件 InnoDB数据表上的索引是表空间的一个组成部分 它们包含着对数据表里所有记录的引用指针 索引是一种数据结构 数据库索引 是数据库管理系统中一个排序的数据结构 以协助快速查询 更新数据库表中数据 索引的实现
  • shiro入门详解以及使用方法、shiro认证与shiro授权

    shiro介绍 什么是shiro shiro是Apache的一个开源框架 它将软件系统的安全认证相关的功能抽取出来 实现用户身份认证 权限授权 加密 会话管理等功能 组成了一个通用的安全认证框架 它可以实现如下的功能 1 验证用户 2 对用
  • 字符串的输入输出处理

    1391 字符串的输入输出处理 Time Limit 1 Sec Memory Limit 64 MBSubmit 333 Solved 71 Submit Status BBS Description 字符串的输入输出处理 Input 第
  • 线程安全的单例模式:饿汉模式&懒汉模式

    目录 一 单例模式 二 饿汉模式 1 特点 2 实现关键 3 代码实现 三 懒汉模式 1 特点 2 实现关键 3 代码实现 一 单例模式 单例模式 一种典型的设计模式 应用场景 一个类只能实例化一个对象 向外提供统一访问接口的场景 作用 对
  • C++基本使用--菱形继承(多继承)

    菱形继承 多继承 多继承 菱形继承 虚继承virtual 多继承 include
  • 犀牛高程点建地形gh插件电池组_Grasshopper快速生成地形

    简述 根据CAD高程点及高程信息在Grasshopper中快速生成地形模型 所需文件 CAD地形文件 所需软件 Rhino Grasshopper 插件 Human Weaverbird Meshtools Meshedit 可自行前往Fo
  • 计算机网络学习笔记:第四章

    计算机网络学习笔记 第四章 学习书籍 计算机网络 自顶向下方法 第四章 网络层 数据平面 其他章节请参阅 计算机网络 自顶向下方法 第一章 计算机网络和因特网 计算机网络 自顶向下方法 第二章 应用层 计算机网络 自顶向下方法 第三章 运输
  • 区块链技术加密算法为什么不可篡改

    区块链采用密码学的方法来保证已有数据不可能被篡改 这个是误解最多的部分 因为很多人一提到区块链就只觉得是这个 诚然 这部分很重要 而且确实区块链也因此得名 但这只是区块链的定义的一部分 这个部分的两个核心要点是 1 密码学哈希函数 2 非对
  • SpringBoot关键面试题

    什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置 properties或yml文件 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven
  • 如何使用 scp 将文件夹从远程复制到本地?

    问 如何使用 scp 将文件夹从远程复制到本地主机 我使用 ssh 登录到我的服务器 然后 我想将远程文件夹 foo 复制到本地 home user Desktop 我如何实现这一目标 答1 huntsbot com 高效赚钱 自由工作 s
  • Qt中关于emit和moc_*.cpp的自动生成

    关于Qt中的emit 函数 直接查看emit的定义 define emit 可以发现emit仅仅是个宏定义符号 编译器宏替换后就是个 空白 根本就不会编译它 所以代码里完全可以去掉这个符号 反之也可以在任何代码前加上这个符号 如这行代码em