简述

QObject类是所有Qt对象的基类。

QObject是Qt对象模型的核心。 该模型的核心特征是称为信号和槽的对象通信机制。 您可以使用connect()将信号连接到槽,并用disconnect()终止该连接。为了避免信号死循环,你可以调用blockSignals()去终止该对象的信号发射。 保护类型函数connectNotify()和disconnectNotify()可以跟踪连接。
 
QObjects对象在树结构中组织起来。当你创建一个QObject对象,以另一个对象作为父对象时,该对象将自动添加到父对象的children()列表中。父类对象拥有子类对象的所有权,即它将在析构函数中自动删除子类对象。你可以通过findChild()或者findChildren()函数由名称或者类型查找对象。
 
每个对象都有一个objectName(),对象的类名也可以通过metaObject::className()获得。你可以用inherits()函数来判断对象是否继承自另外一个类。
 
当一个对象被删除时,它会发出一个destroy()信号。 您可以捕获此信号,以避免对空指针的引用。
QObjects可以通过event()接收事件,也可以过滤其他对象的事件。 有关详细信息,请参阅installEventFilter()和eventFilter()。
事件在创建对象的线程中传递。请注意,对于没有线程亲和性(thread()返回零)的QObject,完全不执行事件处理。使用moveToThread()函数来更改对象及其子对象的线程亲和性(如果对象具有父对象则不能被移动)。
请注意,对于实现信号和槽机制或动态对象属性,Q_OBJECT宏是必需的。你需要在源文件上运行元对象编译器。我们强烈建议在QObject的所有子类中使用此宏。无论是否使用了信号和槽机制,这样做避免一些奇怪的行为。
所有Qt Widget都继承QObject。一个方便的函数isWidgetType()返回一个对象是否是一个Widget。它比qobject_cast
<QWidget *>(obj)或obj->inherits("")快很多。
 
 
私有属性
  objectName : QString
  这个属性表示对象的名称,可以用过 objectName()获取和setObjectName()设置对象的名称。
 
信号
  void QObject::destroyed(QObject *obj = 0) [signal]
  这个信号在对象被销毁之前发射,并且不能被阻塞。当这个对象销毁时,其子类对象也跟着销毁。
 
  void QObject::deleteLater() [slot]
  安排对象的销毁。
  当程序返回到创建该对象的消息循环时,删除该对象。如果调用该函数时,消息循环未运行(例如在 QCoreApplication::exec() 之前对对象调用deleteLater()),则在消息循环启动之后,该对象被删除。如果在主消息循环结束之后调用deleteLater()函数,则不会删除该对象。自从Qt4.8,没有消息循环的线程中的对象调用deleteLater(), 则在线
程结束后,该对象被销毁。
  请注意,进入和离开新的消息循环(例如,打开一个模态对话框),将不执行延迟删除。对于要删除的对象,程序必须返回到调用deleteLater()的消息循环。
  注意:多次调用该函数是安全的,因为当第一个延迟删除函数触发时,该对象的挂起事件都要从消息队列中删除。
 
函数
A.static function
  1.bool QObejct::connect(const QObejct* sender, const  char* signal, const QObject* receiver, const char* method, Qt::ConnectionType type =
Qt::AutoConnection) [static]
  这个是我们最常见的用来连接信号和槽的函数。如果连接成功返回true,连接失败返回false。
  2.bool QObject::connect(const QObejct* sender, const  QMetaMethod & signal, const QObject* receiver, const QMetaMethod & method, Qt::ConnectionType type = Qt::AutoConnection) [static]
  Qt中QMetaMethod,元方法类,告诉我们这个方法的很多元信息(比如signature(),parameterTypes(),parameterNames())。判断一个方法是否是元方法
a:元对象系统中(声明了Q_Obejct宏),一个类中的信号或者槽函数都是元函数。
b: 用Q_INVOKABLE宏声明,构造函数也用Q_INVOKABLE宏注册。
  3.bool QObject::disconnect(const QObejct* sender, const  char* signal, const QObject* receiver, const char* method)
  如果信号和槽断开返回true,否则返回false。
  4.bool QObject::disconnect(const QObejct* sender, const  QMetaMethod & signal, const QObject* receiver, const QMetaMethod & method)
  如果信号和槽断开返回true,否则返回false。
  5.const QMeteObject QObject::staticMetaObject
  静态变量储存了这个类的元对象。
  举例 QPushButton::staticMetaObject.className()  // return  "QPushButton"
  6.QString QObject::tr(const char *sourceText,  const char *disambiguation = 0, int n = -1) [static]
 
B.protected function
  1.void QObject::childEvent(QChildEvent *event) [virtual protected]
  这个事件处理函数能在子类重写,来接收子类的事件。参数就是当前事件。
  在添加和删除子类对象时,QEvent::ChildAdded和QEvent::ChildRemoved事件发送给对象(QEvent::ChildAdded和QEvent::ChildRemoved都是QEvent::Type类型,表示一个事件)。在这两种情况下,你只能指望子类对象是QObject或者QWidgt类型(因为ChildAdded时,子类对象并未完全构造。在ChildRemoved时,子类对象已经被破坏)。
  QEvent::ChildPolished事件发送给窗口,当子类对象被抛光或者抛光的子类对象被添加时。当你接收到抛光事件时,子类对象一般是完全构造好了的,但是这也不能确定。
因为在子类对象构造时,你可能接受到很多的抛光事件。
  对于child widget,你总是能接收到一个ChildAdded事件,零个或多个ChildPolished事件,一个ChildRemoved事件。
  ChildPolished事件被忽略,当一个对象添加后马上删除。如果一个子类对象在构造和析构时,被抛光几次。你可能接收到同一个子类对象几次的抛光事件。
 
  2.void QObject::connectNotify(const char * signal) [virtual protected]
  对象中的信号,连接到某东西时。该函数被调用。
  如果你想比较函数中的参数和一个实际信号。使用QLatin1String()函数和SIGNAL()宏。
  if(QLatin1String(signal) == SIGNAL(valueChanged(int)))  比较参数是否是valueChanged(int)信号?
  如果信号包含多个参数或者空格参数,在SIGNAL()宏的结果上调用QMetaObject::normalizedSignature()函数。
 
  3.void QObject::customEvent(QEvent *event) [virtual protected]
  该事件处理程序能在子类中重写,来接收自定义事件。自定义的事件要大于QEvent::User(QEvent::User值是1000)。事件被作为参数随函数传递。
 
  4.void QObject::disconnectNotify(const char * signal) [virtual protected]
  当信号连接到的某个槽断开时,调用该虚函数。
  
  5.int QObject::receivers(const char * signal) const [protected]
  返回信号的连接数。
 
  6.QObject * QObject::sender() const [protected]
  返回对象的指针。信号连接到槽,在槽中调用该函数,返回发射信号的对象的指针。注意:只有在槽中该函数才有用,其他情况下,返回值是0。
 
  7.int QObject::senderSignalIndex() const [protected]
  返回信号这个函数的原函数索引。只有在槽中调用才返回正常值,在其他地方调用返回-1。
  无论信号是否有参数,该函数总返回带参数的信号索引。当你对信号重载时,该方法明显不适用。
 
  8.void QObject::timerEvent(QTimerEvent *event) [virtual protected]
  这个事件处理函数能在子类重写,以接收子类的定时器事件。
  QTimer类提供了更高的接口。定时器事件作为参数传递。
  
  
 
 
  

  

 

1.QObject类的更多相关文章

  1. Qt::QObject类

    QObject 类是Qt 所有类的基类. QObject是Qt对象模型的核心.这个模型的中心要素就是一种强大的叫做信号与槽无缝对象沟通机制.你可以用 connect()函数来把一个信号连接到槽,也可以 ...

  2. 关于 QObject 类

    1.QObject类   简述 QObject类是所有Qt对象的基类. QObject是Qt对象模型的核心. 该模型的核心特征是称为信号和槽的对象通信机制. 您可以使用connect()将信号连接到槽 ...

  3. 关于QObject类的一些理解

    QRunnable并没有继承自QObject,所以它和其他QObject组件的通信不能使用传统的信号和槽,要是用信号和槽我们必须将其继承自QObject自动的添加 QThread的退出最好用exit( ...

  4. 8、QObject类 moc处理后代码

    QObject在QT中是所有类的基类,经过MOC处理后代码如下 之所以贴出这段代码,是因为很多流程追踪到最后一些关键性函数都是出自这个类 源码 4.8.6 MOC版本 63 1 /********** ...

  5. QObject类 moc处理后代码

    QObject在QT中是所有类的基类,经过MOC处理后代码如下 之所以贴出这段代码,是因为很多流程追踪到最后一些关键性函数都是出自这个类 源码 4.8.6 MOC版本 63 /************ ...

  6. 查漏补缺:QObject类介绍

    QObject是Qt对象模型的中心.这个模型的核心特征就是一种用于无缝对象间通信的被叫做信号和槽的非常强大的机制,可以使用connect()把信号和槽连接起来,也可以通过disconnect()来破坏 ...

  7. Qt:QObject translate

    qobject类是qt所有对象的基类. QObject是Qt的核心对象模型.中心在这个模型是一个非常强大的无缝沟通对象称为信号与槽机制.你可以连接一个信号槽连接()和破坏的连接与断开连接().为了避免 ...

  8. Qt QObject

    [1]Qt的QObject 1.测试代码如下: #include<QApplication> #include<QPushButton> #include<QDebug& ...

  9. 深入了解Qt(一)之QObject

    深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! QObject这个 class 是 QT 对象模型的核心,关于对象模型可以阅读C++对象模型详解 ...

随机推荐

  1. m3u8格式转MP4

    公司直播平台使用的是七牛直播,今天有客户表示想将直播回放视频下载下来,数据妹子犯了愁,表示这个不会下载给客户,于是乎这个任务就落在了我的头上.熟练的打开视频,在 HTML 源代码播放地址为 http: ...

  2. DEDE 列表页调用如 标题,时间,简介等

    以下是直接从板子中复制出来的,CSS自已根据需要写下就行.在调时简介长度不知道怎么控制,现在说下方法1. infolen='30' 这个可以2. 系统设置 >其它设置 >内容简介长度填下就 ...

  3. Docker 架构篇

    Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...

  4. castle windsor学习-------Container Events 容器的事件

    所有的事件是实现IKernelEvents 接口,已容器的Kernel属性暴露出来 1. AddedAsChildKernel 当前的容器添加子容器或其他容器时触发 2. RemovedAsChild ...

  5. DELPHI中四种EXCEL访问技术实现

    一.引言 EXCEL在处理中文报表时功能非常强大,EXCEL报表访问也是信息系统开发中的一个重要内容,本文总结以往开发中所用到的几中EXCEL文件访问方法,在实际工作中也得到了很好的验证,本文列举了其 ...

  6. Merkle 树——空间换时间,分而治之的hash表,通过根节点是由它的两个子节点内容的哈希值组成来校验数据完整性,定位篡改的数据位置

    Merkle 树 图 1.5.6.1 - Merkle 树示例 默克尔树(又叫哈希树)是一种二叉树,由一个根节点.一组中间节点和一组叶节点组成.最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的 ...

  7. Bootstrap-other内置组件

    1.缩略图 缩略图在网站中最常用的地方就是产品列表页面,一行显示几张图片,有的在图片底下(左侧或右侧)带有标题.描述等信息.Bootstrap框架将这一部独立成一个模块组件.并通过“thumbnail ...

  8. python-管理MySQL之ConfigParser模块

    1.拷贝2.7版本的ConfigParser.py模块支持无值解析 cp /usr/local/src/Python-2.7.5/Lib/ConfigParser.py /usr/lib/python ...

  9. 谈MicroMessageTest的开始创建

    一开始,创建一个可以看到的jsp前端页面. 只不过不是用纯jsp页面访问,而是用Servlet doGet跳转至jsp页面,req.getRequestDispatcher(jsp页面的全称 还是全地 ...

  10. Convolutional Neural Networks for Visual Recognition 1

    Introduction 这是斯坦福计算机视觉大牛李菲菲最新开设的一门关于deep learning在计算机视觉领域的相关应用的课程.这个课程重点介绍了deep learning里的一种比较流行的模型 ...