`
izuoyan
  • 浏览: 9132588 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt学习之路(10): Meta-Object系统

阅读更多
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/199472
前面说过,Qt使用的是自己的预编译器,它提供了对C++的一种扩展。利用Qt的信号槽机制,就可以把彼此独立的模块相互连接起来,不需要实现知道模块的任何细节。
为了达到这个目的,Qt提出了一个Meta-Object系统。它提供了两个关键的作用:信号槽和内省。
面向对象程序设计里面会讲到Smalltalk语言有一个元类系统。所谓元类,就是这里所说的Meta-Class。如果写过HTML,会知道 HTML标签里面也有一个<meta>,这是用于说明页面的某些属性的。同样,Qt的Meta-Object系统也是类似的作用。内省又称为 反射,允许程序在运行时获得类的相关信息,也就是meta-information。什么是meta-information呢?举例来说,像这个类叫什 么名字?它有什么属性?有什么方法?它的信号列表?它的槽列表?等等这些信息,就是这个类的meta-information,也就是“元信息”。这个机 制还提供了对国际化的支持,是QSA(Qt Script for Application)的基础。
标准C++并没有Qt的meta-information所需要的动态meta-information。所以,Qt提供了一个独立的工具,moc,通过定义Q_OBJECT宏实现到标准C++函数的转变。moc使用纯C++实现的,因此可以在任何编译器中使用。

这种机制工作过程是:
首先,Q_OBJECT宏声明了一些QObject子类必须实现的内省的函数,如metaObject(),tr(),qt_metacall()等;
第二,Qt的moc工具实现Q_OBJECT宏声明的函数和所有信号;
第三,QObject成员函数connect()和disconnect()使用这些内省函数实现信号槽的连接。
以上这些过程是qmake,moc和QObject自动处理的,你不需要去考虑它们。如果实现好奇的话,可以通过查看QMetaObject的文档和moc的源代码来一睹芳容。

本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/199472

分享到:
评论

相关推荐

    Qt学习之路---尤其适用Qt初学者

    7. **Meta-Object系统** —— 深入了解Qt的元对象系统,它是实现动态属性、信号槽等特性的关键。 8. **MainWindow** —— 掌握如何使用Qt的主窗口组件来搭建复杂的应用界面。 9. **菜单和工具条** —— 学习如何为...

    qt-unified-windows-x86-4.0.1-1-online.zip

    Qt的API设计友好,遵循了C++的面向对象原则,同时引入了元对象系统(Meta-Object System),使得动态对象和信号与槽机制成为可能,大大简化了事件驱动编程。 此外,Qt还支持QML(Qt Meta Language),这是一种声明...

    qt-opensource-windows-x86-5.14.2

    在开发Qt应用时,开发者可以使用Qt Designer来可视化地设计GUI界面,然后通过Qt的MOC(Meta-Object Compiler)处理UI文件生成C++代码。此外,Qt的信号和槽机制使得对象间的通信变得简单而直观,这是Qt设计模式的核心...

    qt-win-opensource-4.7.4-vs2008

    3. moc预处理器:Qt的moc(Meta-Object Compiler)工具用于处理C++的元对象系统,处理包含`Q_OBJECT`宏的类,生成额外的C++代码。 4. QMake构建系统:QMake是一个生成Makefile的工具,它可以读取名为.pro的项目文件...

    qt5 vs2017插件 qt-vsaddin-msvc2017-2.2.1.vsix

    Qt5是Qt库的第五个主要版本,引入了许多新特性,包括对QML(Qt Meta Object Language)的增强,用于构建富媒体和触摸友好的用户界面;增加了新的图形视图模块,改进了2D图形性能;以及对现代C++标准(如C++11和C++14...

    qt-opensource-linux-x64-5.7.1.run.7z

    2. **QML(Qt Meta Object Language)**:这是一种声明式语言,用于构建用户界面,与JavaScript结合使用,可以创建出动态和交互性极强的图形界面。 3. **Qt Quick 2**:在5.7.1版本中,Qt Quick得到了进一步优化,...

    Qt4-学习之路1

    在《Qt 学习之路:从入门到精通》一书中,作者豆子(FinderCheng)介绍了Qt的基础概念及其重要性。Qt是一个跨平台的应用程序开发框架,支持多种操作系统,包括Windows、Linux和Mac OS等。本书旨在帮助读者了解Qt的...

    Qt学习之路(1-60)

    Qt的Meta-Object系统是Qt反射机制的基础,它为信号槽、属性系统和动态属性访问提供了底层支持。笔记中的这部分内容可能包括如何使用QMetaObject类来获取有关对象类型的信息。MainWindow是Qt创建主窗口类时常用的类,...

    C++课设作业:基于Qt-qvfb开发的电子点菜系统.zip

    Qt的元对象系统(Meta-Object-System)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。 元对象系统由以下三个基础组成: 1.QObject类是所有使用元对象系统的类的基类; 2.在一个类的private部分...

    C++课程设计大作业:基于Qt-C++的学生成绩管理系统.zip

    Qt的元对象系统(Meta-Object-System)提供了对象之间通信的信号与槽机制、运行时类型信息和动态属性系统。 元对象系统由以下三个基础组成: 1.QObject类是所有使用元对象系统的类的基类; 2.在一个类的private部分...

    qt-everywhere-opensource-src-4.7.1_20141224.tar.gz

    2. **配置编译环境**:在编译源代码之前,确保你的系统已安装了必要的依赖项,比如C++编译器(GCC或Clang)、 moc(Meta-Object Compiler,用于处理Qt的元对象系统)、uic(User Interface Compiler,用于处理Qt的UI...

    Qt核心机制、Qt元对象系统、Qt信号槽原理

    对象能够支持动态属性和连接信号与槽呢?这就引出了 Qt 的元对象系统。元对象系统是 Qt 为了解决 C++ 静态类型的限制而设计的...不断学习和探索 Qt Core 的源码,不仅可以提升编程技能,还能领略到软件设计的精妙之处。

    Visual Studio 2008 QT编程学习笔记1

    【Visual Studio 2008 QT编程学习笔记1】这篇笔记主要讲述了如何在Visual Studio 2008中集成和使用QT框架进行GUI开发。以下是关键知识点的详细说明: 1. **QT安装与配置**: - 安装QT:使用的是`qt-win-opensource...

    qt-everywhere-opensource-src-4.8.0.tar

    8. **模版与元对象系统**: QT的模版和元对象系统(Meta-Object System, MOC)使C++的静态类型语言具有了动态语言的一些特性,如反射和运行时类型信息,增强了代码的灵活性。 9. **QML与Qt Quick**: 尽管4.8.0版本的...

Global site tag (gtag.js) - Google Analytics