Qt4.7.0文档翻译:QObject类参考,QObject Class Reference
QObject类是所有Qt 对象的基类。
QObject是 Qt 对象模型 的核心。这个模型的核心特性是一个非常有力的进行对象间无缝通信的机制 ,叫做 信号和信号槽 。你可以使用 connect ()来将一个信号连接到一个信号槽 ,使用 disconnect ()来断开连接。要避免无休止的循环通知的话 ,你可以使用 blockSignals ()来临时阻断信号 。保护函数 connectNotify ()和 disconnectNotify ()使得你可以跟踪那些连接 。
QObject 在 对象树 中组织它们自身。当你在创建一个QObject的时候 ,如果 指定另一个对象作为亲代对象 ,那么创建的这个对象会自动将自己添加到亲代对象的 children ()列表中 。亲代对象拥有刚创建的这个对象 : 也就是说 ,它会在自己的析构函数中自动删除它的子代对象们 。你可以通过 findChild ()或者 findChildren ()使用名字以及可选的类型 (type) 参数查找对象 。
每个对象都有一个对象名 ( objectName () ) ,它的类名可以使用对应的 metaObject () (参见 QMetaObject::className ())获得。你可以使用 inherits ()函数来确定某个对象的类是否在QObject继承体系中继承咯另一个类 。
当一个对象被删除时 ,它会发射 destroyed ()信号。你可以捕捉这个信号 ,以便避免对 QObject 的空 (dangling)引用。
QObject 可以通过 event ()接收事件 ,还可以过滤其它对象的事件。参见 installEventFilter ()和 eventFilter () ,以了解细节。 可以重载 一个便利性处理函数 childEvent () ,以捕捉子代对象的事件。
事件是在对象被创建的线程中传送的 ;参见 Qt 中的线程支持 和 thread ()以了解细节。注意 ,对于没有线程依附性 (thread affinity)( thread ()返回0)的 QObject ,根本就不 会进行事件处理 。使用 moveToThread ()函数来改变一个对象和它的子代对象的线程依附性 (如果那个对象有亲代对象的话 ,就无法移动 )。
最後但並不是最不重要的一點 , QObject提供Qt中的基本的定时器支持 ;参见 QTimer 以了解对定时器的高级支持。
注意, Q_OBJECT 宏对于任何实现信号、信号槽或者属性的对象都是必需的 。另外 ,你还需要针对源文件运行 元对象编译器 。我们强烈建议 ,不管在那些QObject子类中有没有使用信号、信号槽和属性 ,都要使用这个宏,因为不这麽做的话可能导致某些函数做出奇怪的事 。
所有的Qt部件都继承咯QObject 。便利函数 isWidgetType ()会告诉你 ,某个对象是否是一个部件。它比 qobject_cast < QWidget *>( obj )或 obj -> inherits (" QWidget ")快得多 。
某些QObject函数 ,例如 children (),返回一个 QObjectList 。 QObjectList 是一个 QList <QObject *>的类型定义。
QObject没有复制构造函数和赋值操作符 。这是从设计上决定的 。实际上 ,它们是声明咯的 ,但是是在私有区域,使用咯 Q_DISABLE_COPY ()宏 。事实上,所有 (直接或间接) 继承自 QObject的Qt类都使用这个宏来将它们的复制构造函数和赋值操作符声明为私有的 。在Qt 对象模型 页面关于 标识 ( Identity )还是值( Value ) 的讨论中可以找到原因。主要的后果就是 ,
在以前你倾向于使用你的QObject子类的值的地方,你应当使用指针咯 。比如,在没有复制构造函数的情况下,你无法在容器类中存储一个QObject子类的值 。你必须存储指针。
Qt的元对象系统提供咯一个自动连接 QObject子类和它们的子代对象 的 信号与信号槽 的机制 。只要对象有适当的对象名 ,并且信号槽按照一个简单的习惯来命名 ,这个连接就可以在运行时由 QMetaObject::connectSlotsByName ()函数建立 。
uic 生成调用这个函数的代码,以便使得能够对用 Qt设计师 创建的窗口中的部件进行自动连接。可以在 Qt 设计师 手册的 在你的程序中使用一个设计师界面文件 小节看到更多关于如何在 Qt 设计师 中使用自动连接的信息 。
从Qt 4.2开始,可以在运行时对QObject实例添加和删除动态属性。动态属性不需要在编译时声明 ,然而它们提供与静态属性相同的优点 ,并且是使用相同的编程接口来操作的 -使用 property ()来读取它们 ,使用来写 setProperty ()。
从Qt4.3开始, Qt设计师 支持动态属性 ,并且标准Qt部件和用户创建的窗口都可以拥有动态属性 。
所有的QObject子类都支持Qt的翻译功能,这样就可以将一个程序的用户界面翻译成不同的语言。
要让用户可见的文字变成可翻译的 ,就必须把它放在 tr ()函数中 。在 写下可翻译的代码 文档中有具体的说明 。
参见 QMetaObject 、 QPointer 、 QObjectCleanupHandler 、 Q_DISABLE_COPY ()和 对象树与所有权 。
HxLauncher: Launch Android applications by voice commands