电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

qt中的元对象系统

10页
  • 卖家[上传人]:m****
  • 文档编号:41780104
  • 上传时间:2018-05-31
  • 文档格式:DOC
  • 文档大小:75KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Qt 中的元对象系统中的元对象系统moc什么是元对象?什么是元对象?In computer science, a metaobject or meta-object is any entity that manipulates, creates, describes, or implements other objects. The object that the metaobject is about is called the base object. Some information that a metaobject might store is the base objects type, interface, class, methods, attributes, variables, functions, control structures, etc.在计算机科学中,元对象是这样一个东西:它可以操纵,创建,描述,或执行其他对象。元对象描述的对象称为基对象。元对象可能存这样的信息:基础对象的类型,接口,类,方法,属性,变量,函数,控制结构等。QT 中的元对象系统中的元对象

      2、系统QT 中的元对象系统基于以下三种东西:1. QObject提到这个类,相信大家都不陌生。几乎所有在 QT 开发的类都继承于此类。QObject 这个类为其他需要用到元对象系统的类提供了一个基类。2.Q_OBJECT放在类声明中的 Q_OBJECT 宏是用来为这个类开启元对象特性的,例如动态的属性(dynamic properties),信号(signals)以及槽(slots)。可这个 Q_OBJECT 宏到底是什么呢?如下图所示,大家可以看到它是一些函数和一个静态的类成员。Q_OBJECT 宏内容如下:#define Q_OBJECT public: Q_OBJECT_CHECK static const QMetaObject staticMetaObject; Q_OBJECT_GETSTATICMETAOBJECT virtual const QMetaObject *metaObject() const; virtual void *qt_metacast(const char *); QT_TR_FUNCTIONS virtual int qt_metacall(QMe

      3、taObject:Call, int, void *); private:而 Q_OBJECT_CHECK 宏的内容是:#define Q_OBJECT_CHECK template inline void qt_check_for_QOBJECT_macro(const T i = i; 这里是检查类声明中是否遗漏 Q_OBJECT 宏,如果遗漏则在编译时给出错误提示。而 QT_TR_FUNCTIONS 宏的内容是:# define QT_TR_FUNCTIONS static inline QString tr(const char *s, const char *c = 0) return staticMetaObject.tr(s, c); static inline QString trUtf8(const char *s, const char *c = 0) return staticMetaObject.trUtf8(s, c); static inline QString tr(const char *s, const char *c, int n) return s

      4、taticMetaObject.tr(s, c, n); static inline QString trUtf8(const char *s, const char *c, int n) return staticMetaObject.trUtf8(s, c, n); 一些字符串操作的算法,这几个方法实际上是隐藏了父类 QObject 中这个几个方法。我们在类定义中调用的 tr 或是 trUtf8方法都是调用这里的方法。3 MOCwhat does MOC do?MOC 编译器为 QObject 子类提供了一些实现元对象特性所需的一些代码。就比如说信号,大家只是在类声明的时候声明了所需的信号,就像下面这样:样当我们把鼠标放到 Q_SINGNALS 时可以看到下面这个宏感觉有点奇怪,它要替换的是它自己。实际上它只是一个 protected 的关键字。说到这里,大家应该会想到,哦,moc 编译器会用 protected 来替换它。但 moc 编译器做的远过于此,它会用 protected 来替换它,但同时还会为这个信号声明方法体。当 moc 工具读取一个 c+源文件时,如果它发现类的声明

      5、中有 Q_OBJECT 时,它会产生另外一个 c+源文件,这个文件中就包含了这些类的元对象代码。这个新产生的文件可以以#include 形式包含到这个类的源文件中,但更常用的做法是和这个类的定义一起编译连接。以 QT Creator 为例,以下代码 MainWindow 类是我创建工程时选择 Mobile Qt Application 时自动创建的一个类,其中我自己增加了3个信号3槽,代码如下所示:#ifndef MAINWINDOW_H#define MAINWINDOW_H#include #include namespace Ui class MainWindow;class MainWindow : public QMainWindowQ_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);MainWindow();public slots:void slotTest1(int value);void slotTest2(const QString value);void slotTest3(bool value);sig

      6、nals:void signalTest1(int value);void signalTest2(const QString value);void signalTest3(bool value);public:void test();private:Ui:MainWindow *ui;#endif / MAINWINDOW_H#include “mainwindow.h“#include “ui_mainwindow.h“MainWindow:MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui:MainWindow)ui-setupUi(this);MainWindow:MainWindow()delete ui;void MainWindow:slotTest1(int value)void MainWindow:slotTest2(const QString value)void MainWindow:slotTest3(bool value)void MainWindow:test()connect(this,

      7、 SIGNAL(signalTest1(int), this, SLOT(slotTest1(int);这个类很简单,但当 moc 读到 mainwindow.h 时发现 Q_OBJECT 时,它会在在这个工程目录下的 moc 目录下创建 moc_mainwindow.cpp。让我们来看看这里面都有些什么:/* Meta object code from reading C+ file mainwindow.h* Created: Thu Sep 2 16:23:24 2010* by: The Qt Meta Object Compiler version 62 (Qt 4.6.3)* WARNING! All changes made in this file will be lost!*/#include “./mainwindow.h“#if !defined(Q_MOC_OUTPUT_REVISION)#error “The header file mainwindow.h doesnt include .“#elif Q_MOC_OUTPUT_REVISION != 62#

      8、error “This file was generated using the moc from 4.6.3. It“#error “cannot be used with the include files from this version of Qt.“#error “(The moc has changed too much.)“#endifQT_BEGIN_MOC_NAMESPACEstatic const uint qt_meta_data_MainWindow = / content:4, / revision0, / classname0, 0, / classinfo6, 14, / methods0, 0, / properties0, 0, / enums/sets0, 0, / constructors0, / flags3, / signalCount/ signals: signature, parameters, type, tag, flags18, 12, 11, 11, 0x05,35, 12, 11, 11, 0x05,56, 12, 11, 1

      9、1, 0x05,/ slots: signature, parameters, type, tag, flags74, 12, 11, 11, 0x0a,89, 12, 11, 11, 0x0a,108, 12, 11, 11, 0x0a,0 / eod;static const char qt_meta_stringdata_MainWindow = “MainWindow00value0signalTest1(int)0“signalTest2(QString)0signalTest3(bool)0“slotTest1(int)0slotTest2(QString)0“slotTest3(bool)0“;const QMetaObject MainWindow:staticMetaObject = #ifdef Q_NO_DATA_RELOCATIONconst QMetaObject #endif /Q_NO_DATA_RELOCATIONconst QMetaObject *MainWindow:metaObject() constreturn QObject:d_ptr-metaObject ? QObject:d_ptr-metaObject : void *MainWindow:qt_metacast(const char *_clname)if (!_clname) return 0;if (!strcmp(_cl

      《qt中的元对象系统》由会员m****分享,可在线阅读,更多相关《qt中的元对象系统》请在金锄头文库上搜索。

      点击阅读更多内容
    TA的资源
  • 肿瘤学发展简史

    肿瘤学发展简史

  • 综合实践课折纸ppt

    综合实践课折纸ppt

  • 综合实践张开想象的翅膀

    综合实践张开想象的翅膀

  • 综合实践课走进粤菜

    综合实践课走进粤菜

  • 综合性学习走进中秋节

    综合性学习走进中秋节

  • 1986--2008年全国硕士研究生入学统一考试英语试题及解析

    1986--2008年全国硕士研究生入学统一考试英语试题及解析

  • 2020版高考数学一轮复习第一章集合与常用逻辑用语第二节命题及其关系充分条件与必要条件课件

    2020版高考数学一轮复习第一章集合与常用逻辑用语第二节命题及其关系充分条件与必要条件课件

  • 2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第四节函数的图象课件理

    2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第四节函数的图象课件理

  • 2020版高考数学一轮复习第一章集合与常用逻辑用语第三节简单的逻辑联结词全称量词与存在量词课件理

    2020版高考数学一轮复习第一章集合与常用逻辑用语第三节简单的逻辑联结词全称量词与存在量词课件理

  • 2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第五节二次函数与幂函数课件理

    2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第五节二次函数与幂函数课件理

  • 2020版高考数学一轮复习第二章不等式第二节一元二次不等式及其解法课件

    2020版高考数学一轮复习第二章不等式第二节一元二次不等式及其解法课件

  • 2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第七节对数与对数函数课件理

    2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第七节对数与对数函数课件理

  • 2020版高考数学一轮复习第二章不等式第四节二元一次不等式组及简单的线性规划问题课件

    2020版高考数学一轮复习第二章不等式第四节二元一次不等式组及简单的线性规划问题课件

  • 2020版高考数学一轮复习第二章不等式第一节不等关系与不等式课件

    2020版高考数学一轮复习第二章不等式第一节不等关系与不等式课件

  • 2020版高考数学一轮复习第二章不等式第三节绝对值不等式课件

    2020版高考数学一轮复习第二章不等式第三节绝对值不等式课件

  • 2020版高考历史一轮复习第五单元古代中国经济的基本结构与特点第1讲古代中国的农业和手工业课件新人教版必修

    2020版高考历史一轮复习第五单元古代中国经济的基本结构与特点第1讲古代中国的农业和手工业课件新人教版必修

  • 2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第三节函数的奇偶性及周期性课件理

    2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第三节函数的奇偶性及周期性课件理

  • 2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第九节函数模型及其应用课件理

    2020版高考数学一轮复习第二章函数的概念与基本初等函数Ⅰ第九节函数模型及其应用课件理

  • 2020版高考数学一轮复习第二章不等式第五节基本不等式课件

    2020版高考数学一轮复习第二章不等式第五节基本不等式课件

  • 2020版高考历史一轮复习第十三单元近现代中国的思想解放及理论成果和科教文化第3讲现代中国的科技教育与文学艺术课件新人教版必修

    2020版高考历史一轮复习第十三单元近现代中国的思想解放及理论成果和科教文化第3讲现代中国的科技教育与文学艺术课件新人教版必修

  • 点击查看更多
    最新标签
    信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.