Qt_模块_ Core


Qt官方文档

1. Qt Core

1.1. 核心功能

Qt核心添加这些功能到c++:

  • 一种非常强大的无缝对象通信机制,称为信号和插槽

  • 可查询和可设计的对象属性

  • 层次结构和可查询的对象树组织

  • 使用受保护的指针(QPointer)以自然的方式拥有对象所有权

  • 跨库边界的动态转换

以下页面提供了更多关于Qt核心特性的信息:

  • 元对象系统

  • 属性系统

  • 对象模型

  • 对象树和所有权

  • 信号和槽

1.2. 使用模块

使用Qt模块需要直接或通过其他依赖关系链接到模块库。 包括CMake和qmake在内的几种构建工具对此都有专门的支持。

1.2.1. 用CMake构建

使用find_package()命令在Qt5包中找到所需的模块组件:

find_package(Qt5 COMPONENTS Core REQUIRED)

target_link_libraries(mytarget Qt5::Core)

另请参阅“使用CMake进行构建”概述。

1.2.2. 用qmake构建

如果使用qmake生成项目,则默认情况下会链接Qt5Core。

1.3. 线程和并发编程

Qt以平台无关的线程类,线程安全的事件发布方式以及跨线程的信号插槽连接的形式提供线程支持。多线程编程也是执行耗时的操作而不冻结应用程序用户界面的有用范例。

Qt页面中的线程支持包含有关在应用程序中实现线程的信息。Qt并发模块提供了其他并发类。

1.4. 输入/输出、资源和容器

Qt提供了一个资源系统,用于组织应用程序文件和资产,一组容器以及用于接收输入和打印输出的类。

  • 容器类

  • 序列化Qt数据类型

  • 隐式共享

此外,Qt Core提供了一种独立于平台的机制,用于将二进制文件存储在应用程序的可执行文件中。

  • Qt资源系统

1.5. 其他框架

Qt Core还提供了Qt的一些关键框架。

  • 动画框架

  • Qt中的JSON支持

  • 状态机框架

  • 如何创建Qt插件

  • 事件系统

1.6. 许可和出处

Qt Core可以从The Qt Company获得商业许可。此外,它可在免费软件许可下获得。从Qt 5.4开始,这些免费软件许可证是GNU通用公共许可证版本3或GNU通用公共许可证版本2。有关详细信息,请参阅Qt许可。

Windows上的可执行文件可能链接到qtmain库。该库可根据商业许可获得,也可根据BSD 3条款的“新”或“修订”许可获得。

此外,根据以下许可许可证,Qt 5.14.2中的Qt Core可能包含第三方模块:

Data Compression Library (zlib), version 1.2.11zlib License
Easing Equations by Robert PennerBSD 3-clause “New” or “Revised” License
Efficient Binary-Decimal and Decimal-Binary Conversion Routines for IEEE Doubles, version 3.1.5BSD 3-clause “New” or “Revised” License
FreeBSD strtoll and strtoull, version 18b29f3fb8abee5d57ed8f4a44f806bec7e0eeffBSD 3-clause “New” or “Revised” License
MD4Public Domain
MD5Public Domain
PCRE2 - Stack-less Just-In-Time Compiler, version 10.34BSD 2-clause “Simplified” License
PCRE2, version 10.34BSD 3-clause “New” or “Revised” License
QEventDispatcher on macOSBSD 3-clause “New” or “Revised” License
Secure Hash Algorithm SHA-1Public Domain
Secure Hash Algorithm SHA-3 - Keccak, version 3.2Creative Commons Zero v1.0 Universal
Secure Hash Algorithm SHA-3 - brg_endian, version https://github.com/BrianGladman/sha/ commit 4b9e13ead2c5b5e41ca27c65de4dd69ae0bac228BSD 2-clause “Simplified” License
Secure Hash Algorithms SHA-384 and SHA-512BSD 3-clause “New” or “Revised” License
Text Codec: EUC-JPBSD 2-clause “Simplified” License
Text Codec: EUC-KRBSD 2-clause “Simplified” License
Text Codec: GBKBSD 2-clause “Simplified” License
Text Codec: ISO 2022-JP (JIS)BSD 2-clause “Simplified” License
Text Codec: Shift-JISBSD 2-clause “Simplified” License
Text Codec: TSCIIBSD 2-clause “Simplified” License
Text Codecs: Big5, Big5-HKSCSBSD 2-clause “Simplified” License
The Public Suffix List, version 3bd641472776a5df4a8c6407da4a4846282cba94, fetched on 2019-10-23Mozilla Public License 2.0
TinyCBOR, version 0.6+patchesMIT License
Unicode Character Database (UCD), version 20Unicode License Agreement - Data Files and Software (2016)
Unicode Common Locale Data Repository (CLDR), version v36Unicode License Agreement - Data Files and Software (2016)
forkfdMIT License

1.7. 参考

这些是指向API参考资料的链接。

C++ ClassesC ++类
Animation Classes动画类
Threading Classes线程类
Container Classes容器类
Plugin Classes插件类
Implicitly Shared Classes隐式共享类
State Machine Classes状态机类
Input/Output Classes输入/输出类别
Event Classes事件类
<think>好的,用户遇到了QT_NO_DATASTREAM相关的编译或运行时问题,需要分析原因并提供解决方案。首先,我需要回忆关于QtQT_NO_DATASTREAM宏的作用和常见问题。 QT_NO_DATASTREAM宏通常在Qt配置时被定义,用于禁用QDataStream相关的功能。用户可能在项目中使用了QDataStream,但由于该宏被定义,导致编译错误或运行时异常。根据引用[2]中的情况,跨平台开发时可能出现类似问题,比如不同平台下的配置差异导致宏定义不一致,进而引发错误。 接下来,检查错误的具体表现。编译错误可能包括“QDataStream未声明”或“无法识别的标识符”。运行时错误可能涉及序列化/反序列化失败,如引用[2]提到的64位整型处理问题,可能与数据流设置有关。 解决方案方面,首先需要确认是否在代码或项目配置中显式定义了QT_NO_DATASTREAM。用户可能在.pro文件中添加了DEFINES += QT_NO_DATASTREAM,或者在代码中使用#define QT_NO_DATASTREAM,这需要检查并移除。此外,Qt的默认配置可能在某些情况下禁用该模块,需要确保已包含QtCore模块中的datastream部分。 跨平台问题也需注意,如引用[3]中的Linux配置可能与Windows不同,导致宏定义不一致。需检查两个平台的编译配置,确保一致性。同时,清理构建缓存和重新运行qmake是关键步骤,避免旧配置残留。 如果用户确实需要禁用QDataStream,但部分代码依赖它,就需要条件编译或重构代码,排除相关部分。例如,使用#ifndef QT_NO_DATASTREAM包裹依赖代码,或替换为其他序列化方法。 最后,参考引用[4]中的Qt相关课程,可能涉及性能优化和源码分析,帮助用户深入理解Qt机制,但当前问题更侧重于配置和宏处理。需确保回答清晰,步骤具体,并提醒用户检查项目文件和构建环境,确保模块正确包含。</think>### QT_NO_DATASTREAM 错误原因及解决方案 #### 1. **错误原因分析** - **宏定义冲突**:$QT\_NO\_DATASTREAM$ 是Qt框架中用于禁用 $QDataStream$ 类的编译选项。若在项目配置或代码中显式定义了此宏,会导致所有依赖 $QDataStream$ 的功能无法编译或运行[^2]。 - **模块未启用**:Qt默认可能未包含数据流模块(如嵌入式系统配置),需检查项目文件是否包含 `QT += core` 且未主动禁用相关功能。 - **跨平台配置差异**:在不同操作系统(如Windows与Linux)下,Qt配置可能不一致。例如,Linux编译时可能因工具链参数(如引用[3]中的 `QMAKE_AR = mipsel-linux-ar`)导致模块行为差异[^3]。 #### 2. **解决方案步骤** **步骤1:检查项目配置** - 打开项目文件(`.pro` 或 `.qmake.conf`),移除所有包含 $QT\_NO\_DATASTREAM$ 的定义: ```qmake # 错误示例(需删除) DEFINES += QT_NO_DATASTREAM ``` - 确保启用了核心模块: ```qmake QT += core ``` **步骤2:清理构建缓存** - 删除原有构建目录(如 `build/`),重新运行 `qmake` 和 `make`,避免残留配置影响。 **步骤3:验证代码依赖** - 若代码中直接使用 $QDataStream$,添加条件编译保护: ```cpp #ifndef QT_NO_DATASTREAM QDataStream stream(&file); stream << data; #endif ``` - 若需强制启用数据流支持,在项目文件中添加: ```qmake CONFIG += datastream ``` **步骤4:跨平台一致性检查** - 对比Windows与Linux的编译参数(如引用[3]中工具链配置),确保两者均未定义 $QT\_NO\_DATASTREAM$[^3]。 #### 3. **扩展建议** - 若需优化Qt性能或深入原理,可参考QT性能优化与源码分析课程(引用[4])[^4]。 - 对于序列化问题,可改用JSON或XML等跨平台格式替代 $QDataStream$,避免依赖特定模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值