Qt类总结(二)QObject

QObject简介
Header: #include < QObject >
qmake: QT += core
Inherited By: QAbstractAnimation, QAbstractEventDispatcher, QAbstractItemModel, QAbstractState, QAbstractTransition, QCoreApplication, QEventLoop, QFileSelector, QFileSystemWatcher, QIODevice, QItemSelectionModel, QLibrary, QMimeData, QObjectCleanupHandler, QPluginLoader, QSettings, QSharedMemory, QSignalMapper, QSocketNotifier, QThread, QThreadPool, QTimeLine, QTimer, QTranslator, and QWinEventNotifier;

QObject属性

objectName : QString
  此属性包含此对象的名称;可以使用findChild()按名称(和类型)查找对象。可以使用findChildren()找到一组对象。默认情况下,此属性包含空字符串。
访问功能:

QString objectName() const;
void setObjectName(const QString &name);

通知信号:

void objectNameChanged(const QString &objectName);//注意:这是一个专用信号。它可以用于信号连接,但不能由用户发出。

QObject类函数

QObject(QObject *parent = nullptr);  //构造具有父对象的对象。对象的父对象可以被视为对象的所有者。
//例如,对话框是其包含的“确定”和“取消”按钮的父级。父对象的析构函数将销毁所有子对象。将parent设置为0将构造一个没有父对象的对象。如果对象是一个小部件,它将成为一个顶级窗口。
//注意:此函数可以通过元对象系统和QML调用。请参阅Q_INVOKABLE。

virtual ~QObject();  //销毁对象,删除其所有子对象。
//自动断开与对象之间的所有信号连接,并从事件队列中删除对象的所有挂起的已发布事件。但是,使用deleteLater()通常比直接删除QObject子类更安全。
//警告:将删除所有子对象。如果这些对象中的任何一个位于堆栈或全局上,那么您的程序迟早会崩溃。我们不建议从父对象外部保留指向子对象的指针。如果您仍然这样做,destrocted()信号将使您有机会检测对象何时被销毁。
//警告:在挂起事件等待传递时删除QObject可能会导致崩溃。如果QObject存在于与当前执行的线程不同的线程中,则不能直接删除该QObject。改为使用deleteLater(),这将导致事件循环在所有挂起事件传递给对象后删除该对象。

bool blockSignals(bool block);  //如果block为true,则此对象发出的信号将被阻止(即,发出信号将不会调用任何连接到它的东西)。如果block为false,则不会发生此类阻塞。
//返回值是SignalSBlock()的上一个值。
//请注意,即使此对象的信号已被阻止,也会发出destrocted()信号。被阻止时发出的信号不会被缓冲。

const QObjectList &children() const;  //返回子对象的列表。QObjectList类在<QObject>头文件中定义如下:typedef QList<QObject*>QObjectList;
//添加的第一个子对象是列表中的第一个对象,添加的最后一个子对象是列表中的最后一个对象,即在末尾追加新的子对象。
//请注意,当提升或降低QWidget子项时,列表顺序会发生变化。升起的小部件将成为列表中的最后一个对象,而降下的小部件将成为列表中的第一个对象。

QMetaObject::Connection connect(const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type = Qt::AutoConnection) const;//此函数重载connect()。
//将来自发送方对象的信号连接到此对象的方法。
//等效于连接(发送器、信号、此、方法、类型)。
//您建立的每个连接都会发出一个信号,因此重复连接会发出两个信号。可以使用disconnect()断开连接。
//注意:此函数是线程安全的。

bool disconnect(const char *signal = nullptr, const QObject *receiver = nullptr, const char *method = nullptr) const;  //此函数重载disconnect()。
//从接收器的方法断开信号。
//当涉及的任何一个对象被破坏时,信号插槽连接将被移除。
//注意:此函数是线程安全的。

bool disconnect(const QObject *receiver, const char *method = nullptr) const;//此函数重载disconnect()。
//断开此对象中所有信号与接收器方法的连接。
//当涉及的任何一个对象被破坏时,信号插槽连接将被移除。

void dumpObjectInfo() const;  //将此对象的信号连接等信息转储到调试输出。
//注意:在Qt5.9之前,此函数不是常量。

void dumpObjectTree() const;  //将子目录树转储到调试输出。
//注意:在Qt5.9之前,此函数不是常量。

QList<QByteArray> dynamicPropertyNames() const;//返回使用setProperty()动态添加到对象的所有属性的名称。
//Qt4.2中引入了此函数。

virtual bool event(QEvent *e);  //此虚拟函数接收对象的事件,如果识别并处理事件e,则应返回true。
//可以重新实现event()函数以自定义对象的行为。
//确保为所有未处理的事件调用父事件类实现。

virtual bool eventFilter(QObject *watched, QEvent *event); //如果此对象已作为监视对象的事件筛选器安装,则筛选事件。
//在重新实现此函数时,如果要过滤掉事件,即停止进一步处理,请返回true;否则返回false。

T findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const; //返回此对象的子对象,该子对象可以强制转换为类型T并称为name,如果没有此类对象,则返回0。省略name参数会导致所有对象名称都匹配。除非options指定FindDirectChildrenOnly选项,否则搜索是递归执行的。
//如果有多个子项匹配搜索,则返回最直接的祖先。如果有多个直系祖先,那么返回哪一个还没有定义。在这种情况下,应该使用findChildren()。

QList<T> findChildren(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const; //返回此对象的所有子对象,这些子对象具有可以转换为T类型的给定名称,如果没有此类对象,则返回空列表。
//省略name参数会导致所有对象名称都匹配。除非options指定FindDirectChildrenOnly选项,否则搜索是递归执行的。

QList<T> findChildren(const QRegExp &regExp, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const;  //此函数重载findChildren()。
//返回此对象的子对象,这些子对象可以强制转换为类型T,并且其名称与正则表达式regExp匹配;如果没有此类对象,则返回空列表。除非options指定FindDirectChildrenOnly选项,否则搜索是递归执行的。

QList<T> findChildren(const QRegularExpression &re, Qt::FindChildOptions options = Qt::FindChildrenRecursively) const;  //此函数重载findChildren()。
//返回此对象的子对象,这些子对象可以强制转换为类型T,并且其名称与正则表达式re匹配;如果没有此类对象,则返回空列表。除非options指定FindDirectChildrenOnly选项,否则搜索是递归执行的。
//该函数是在Qt5.0中引入的。

bool inherits(const char *className) const;  //如果此对象是继承className的类或继承className的QObject子类的实例,则返回true;否则返回false。
//类被认为是继承自身的。

void installEventFilter(QObject *filterObj);  //在此对象上安装事件筛选器filterObj。
//事件筛选器是接收发送到此对象的所有事件的对象。筛选器可以停止事件或将其转发到此对象。事件筛选器filterObj通过其eventFilter()函数接收事件。如果应该过滤事件(即停止),则eventFilter()函数必须返回true;否则它必须返回false。
//如果在单个对象上安装了多个事件筛选器,则首先激活最后安装的筛选器

bool isWidgetType() const;  //如果对象是小部件,则返回true;否则返回false。
//调用此函数相当于调用inherits(“QWidget”),只是速度要快得多。

bool isWindowType() const;  //如果对象是窗口,则返回true;否则返回false。
//调用此函数相当于调用inherits(“QWindow”),只是速度要快得多。

void killTimer(int id);  //使用计时器标识符id终止计时器。
//计时器事件启动时,startTimer()返回计时器标识符。

virtual const QMetaObject *metaObject() const;  //返回指向此对象的元对象的指针。
///元对象包含有关继承QObject的类的信息,例如类名、超类名、属性、信号和插槽。包含Q_OBJECT宏的每个QObject子类都将有一个元对象。
//信号/插槽连接机制和属性系统需要元对象信息。函数的inherits()还使用元对象。
//如果没有指向实际对象实例的指针,但仍希望访问类的元对象,则可以使用staticMetaObject。

void moveToThread(QThread *targetThread);  //更改此对象及其子对象的线程关联性。如果对象具有父对象,则无法移动该对象。事件处理将在targetThread中继续。
//要将对象移动到主线程,请使用QApplication::instance()检索指向当前应用程序的指针,然后使用QApplication::thread()检索应用程序所在的线程。

QString objectName() const;  //此属性包含此对象的名称
//可以使用findChild()按名称(和类型)查找对象。可以使用findChildren()找到一组对象。

QObject *parent() const;  //返回指向父对象的指针

QVariant property(const char *name) const;  //返回对象的name属性的值。
//如果不存在此类属性,则返回的变量无效。
//有关所有可用属性的信息通过metaObject()和dynamicPropertyNames()提供。

void removeEventFilter(QObject *obj);   //从此对象中删除事件筛选器对象obj。如果未安装此类事件筛选器,则忽略该请求。
//销毁此对象时,将自动删除此对象的所有事件筛选器。
//删除事件筛选器始终是安全的,即使在事件筛选器激活期间(即从eventFilter()函数中)

void setObjectName(const QString &name);  //设置象的name属性的值。

void setParent(QObject *parent);  //使对象成为父对象的子对象。

bool setProperty(const char *name, const QVariant &value);  //将对象的name属性的值设置为value。
//如果该属性是在类中使用Q_属性定义的,则成功时返回true,否则返回false。如果该属性未使用Q_属性定义,因此未在元对象中列出,则将其添加为动态属性,并返回false。
//有关所有可用属性的信息通过metaObject()和dynamicPropertyNames()提供。
//可以使用property()再次查询动态属性,也可以通过将属性值设置为无效的QVariant来删除动态属性。更改动态属性的值会导致QDynamicPropertyChangeEvent发送到对象。
//注意:以“_q_”开头的动态属性保留用于内部目的。

bool signalsBlocked() const;  //如果信号被阻塞,则返回true;否则返回false。
//默认情况下,信号不会被阻止。

int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);  //启动计时器并返回计时器标识符,如果无法启动计时器,则返回零。
//在调用killTimer()之前,计时器事件将每隔毫秒发生一次。如果interval为0,则每当没有更多的窗口系统事件要处理时,计时器事件都会发生一次。
//当计时器事件发生时,将使用QTimerEvent事件参数类调用virtual timerEvent()函数。重新实现此函数以获取计时器事件。
//如果有多个计时器正在运行,则可以使用QTimerEvent::timerId()查找激活的计时器。

int startTimer(std::chrono::milliseconds time, Qt::TimerType timerType = Qt::CoarseTimer);  //启动计时器并返回计时器标识符

QThread *thread() const;  //返回对象所在的线程。

QObject信号

void destroyed(QObject *obj = nullptr);  //该信号在物体obj被破坏之前立即发出,且无法阻止。
//发出此信号后,所有对象的子对象将立即被销毁。

void objectNameChanged(const QString &objectName);  //此信号在对象名称更改后发出。新对象名作为objectName传递。
//注意:这是一个专用信号。它可以用于信号连接,但不能由用户发出。
//注意:属性objectName的通知程序信号。

共有槽

void deleteLater();  //计划删除此对象。

静态公共成员


QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection);

QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection);

QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection);

QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor);

QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection);

bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method);

bool disconnect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method);

bool disconnect(const QMetaObject::Connection &connection);

bool disconnect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method);

const QMetaObject staticMetaObject;
QString tr(const char *sourceText, const char *disambiguation = Q_OBJECT, int n = Q_OBJECT);

protected函数


virtual void childEvent(QChildEvent *event);  //此事件处理程序可以在子类中重新实现以接收子事件。事件在事件参数中传递。

virtual void connectNotify(const QMetaMethod &signal);  //当某个对象已连接到此对象中的信号时,将调用此虚拟函数
//警告:此函数违反了面向对象的模块化原则。然而,当您只需要在某些东西连接到信号时执行昂贵的初始化时,它可能会很有用。
//警告:此函数从执行连接的线程调用,该线程可能与此对象所在的线程不同。
//该函数是在Qt5.0中引入的。

virtual void customEvent(QEvent *event); //可以在子类中重新实现此事件处理程序以接收自定义事件。自定义事件是用户定义的事件,其类型值至少与QEvent::type枚举的QEvent::user项一样大,通常是QEvent子类。事件在事件参数中传递。

virtual void disconnectNotify(const QMetaMethod &signal);  //当某个对象与该对象中的信号断开连接时,将调用此虚拟函数。

bool isSignalConnected(const QMetaMethod &signal) const;  //如果信号连接到至少一个接收器,则返回true,否则返回false。

int receivers(const char *signal) const;  //返回连接到信号的接收器数量。

QObject *sender() const;  //如果在由信号激活的插槽中调用,则返回指向发送信号的对象的指针;否则返回0。指针仅在从该对象的线程上下文调用该函数的插槽执行期间有效。
//如果发送器被破坏,或者插槽与发送器信号断开,则此函数返回的指针将无效。
//警告:此函数违反了面向对象的模块化原则。但是,当多个信号连接到单个插槽时,访问发送方可能很有用。
//警告:如上所述,当从与此对象线程不同的线程通过Qt::DirectConnection调用插槽时,此函数的返回值无效。不要在这种情况下使用此功能。

int senderSignalIndex() const;  //返回调用当前正在执行的插槽的信号的元方法索引,该插槽是sender()返回的类的成员。如果在由信号激活的插槽外部调用,则返回-1。

virtual void timerEvent(QTimerEvent *event);  //此事件处理程序可以在子类中重新实现,以接收对象的计时器事件。
//QTimer为计时器功能提供了更高级别的接口,还提供了有关计时器的更一般信息。计时器事件在事件参数中传递。

protected变量

QScopedPointer<QObjectData> d_ptr;

静态保护成员

const QMetaObject staticQtMetaObject;
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的库和工具,用于开发图形化用户界面、网络通信、数据存储等功能。 在Qt中,合成(composition),继承(inheritance),QObject是三个很重要的概念。 合成是一种将多个对象组合成一个整体的方式。Qt中的合成通常通过在一个中定义其他的对象来实现。这种以对象作为成员变量的方式,能够实现之间的协作和信息共享。通过合成,我们可以将代码分割为多个模块,每个模块负责不同的功能,从而提高代码的可重用性和可维护性。 继承是一种基于现有的扩展机制。通过继承,我们可以创建新的,继承并扩展已有的功能。Qt中的许多都是通过继承Q对象(QObject)实现的。继承Q对象带来了很多好处,比如信号与槽机制、对象模型等。通过继承,我们可以快速开发出具有可扩展性和可定制性的,而且可以方便地重写和重载已有方法。 Q对象是Qt框架中的基础,也是所有对象的基。Q对象为Qt程序带来了很多重要的特性,比如内存管理、信号与槽机制、对象间通信等。Q对象通过QObject提供了一系列的宏和函数,供开发者使用。QObject中的宏和函数能够帮助我们实现对象之间的通信、生命周期管理和事件处理等功能。在Qt中,几乎所有的都是Q对象或其子总结来说,Qt的合成、继承和Q对象是开发Qt应用程序中不可或缺的概念。合成能够实现模块化和代码重用,继承能够实现的扩展和定制,Q对象为Qt应用程序提供了很多重要的功能特性。通过合理地运用这些概念,我们可以更快地开发出稳定、高效的Qt应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值