Qt-QObject类学习

QObject类:

  • QObject类是Qt中所有对象的基类,它提供了对象间通信、信号与槽机制、事件处理等核心功能。
    所有需要使用Qt对象特性的类都应该直接或间接地继承自QObject类。

信号与槽:

  • QObject类引入了信号与槽机制,使得对象之间的通信更加灵活和简单。
    通过在QObject派生类中声明信号和槽,并使用connect函数连接它们,可以实现对象间的异步通信。

属性系统:

  • QObject类提供了属性系统,允许动态地为对象添加属性,并支持属性的通知和监视。
    可以使用setProperty和property函数来设置和获取对象的属性值。

事件处理:

  • QObject类提供了事件处理机制,允许对象处理各种事件,包括键盘事件、鼠标事件、定时器事件等。
    可以通过重写event函数来处理特定类型的事件。

对象树:

  • Qt中的对象通常以树形结构组织,形成一个对象树。
  • QObject类提供了父子关系管理功能,允许将对象添加到其他对象中,形成对象树。

元对象系统:

  • QObject类使用元对象系统(Meta-Object System)来提供一些额外的功能,如动态属性查找、信号槽的运行时连接等。
  • 元对象系统通过元对象(Meta-Object)来描述类的结构和特性,包括信号、槽、属性等信息。
QObject(QObject *parent=nullptr):
  • 这是 QObject 类的构造函数,它接受一个指向 QObject 的指针作为参数,通常用于设置对象的父对象。
  • 如果没有传递父对象,则默认为 nullptr,表示没有父对象。

virtual ~QObject():

  • 这是 QObject 类的析构函数,它通常被声明为虚函数以支持多态性。在对象被销毁时,析构函数会被调用,用于释放对象占用的资源。
  • 在 QObject 的子类中,通常会重写析构函数以确保正确地释放资源。

*virtual bool event(QEvent event):

  • 这是一个虚函数,用于处理事件。
  • QObject 及其子类可以重写这个函数来处理不同类型的事件。
  • 当事件分派给对象时,会调用这个函数来处理事件。

**virtual bool eventFilter(QObject watched, QEvent event):

  • 这也是一个虚函数,用于事件过滤。
  • QObject 及其子类可以实现事件过滤器来拦截和处理其他对象的事件。
  • 重写这个函数允许在事件到达目标对象之前拦截和处理它们。

objectName() 和 setObjectName(const QString &name):

  • 用于获取和设置对象的名称,对象名称是一个字符串,通常用于在Qt应用程序中识别和定位对象。

isWidgetType():

  • 检查对象是否是一个小部件(widget)类型,返回一个布尔值,如果对象是小部件类型则返回true,否则返回false。

isWindowType():

  • 检查对象是否是窗口(window)类型,返回一个布尔值,如果对象是窗口类型则返回true,否则返回false

signalsBlocked() 和 blockSignals(bool b):

  • 用于管理信号的阻塞。
  • signalsBlocked() 用于检查当前对象是否已阻塞信号,返回一个布尔值,如果信号被阻塞则返回true,否则返回false。
  • blockSignals(bool b) 用于设置是否阻塞信号,传入true则阻塞信号,传入false则解除阻塞。

thread() 和 moveToThread(QThread *thread):

  • 用于线程管理。thread() 用于获取对象当前所在的线程。moveToThread(QThread *thread) 用于将对象移动到指定的线程中执行。

int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer):

  • 这个函数用于启动一个定时器,并返回一个唯一的定时器标识符(id)。
  • 参数 interval 指定了定时器的时间间隔,单位为毫秒。
  • 参数 timerType 则指定了定时器的类型,可以是 Qt::CoarseTimer 或 Qt::PreciseTimer,分别表示粗略定时器和精确定时器。精确定时器提供更高的精度,但可能会对系统资源产生更大的负担。如果不提供 timerType 参数,默认为 Qt::CoarseTimer。

void killTimer(int id):

  • 这个函数用于停止指定标识符(id)对应的定时器。通过传入之前启动定时器时返回的唯一标识符来确定要停止的定时器。

findChild 函数:

template<typename T>
inline T findChild(const QString &aName = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
{
    typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type ObjType;
    return static_cast<T>(qt_qFindChild_helper(this, aName, ObjType::staticMetaObject, options));
}

参数:
  aName:要查找的子对象的名称,默认为空字符串表示查找所有子对象。
  options:查找选项,默认为 Qt::FindChildrenRecursively,表示递归查找。
返回值:
  返回指定类型 T 的子对象指针,如果找到则返回该对象的指针,否则返回 nullptr

findChildren 函数:

template<typename T>
inline QList<T> findChildren(const QString &aName = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const
{
    typedef typename std::remove_cv<typename std::remove_pointer<T>::type>::type ObjType;
    QList<T> list;
    qt_qFindChildren_helper(this, aName, ObjType::staticMetaObject,
                            reinterpret_cast<QList<void *> *>(&list), options);
    return list;
}

参数:
  aName:要查找的子对象的名称,默认为空字符串表示查找所有子对象。
  options:查找选项,默认为 Qt::FindChildrenRecursively,表示递归查找。
返回值:
  返回指定类型 T 的子对象列表 QList<T>,列表中包含了所有符合条件的子对象。

const QObjectList &children() const { return d_ptr->children; }:

  • 这个函数返回一个QObjectList对象,其中包含了当前对象的子对象列表。
  • QObjectList是一个简单的QList<QObject *>类型,它包含了指向当前对象直接子对象的指针列表。
void setParent(QObject *parent);:
  • 这个函数用于设置当前对象的父对象。父对象负责管理其子对象的生命周期,并在父对象销毁时自动销毁子对象。
  • 通过调用这个函数,可以将当前对象设置为指定父对象的子对象。
void installEventFilter(QObject *filterObj);:
  • 这个函数用于安装事件过滤器。
  • 事件过滤器是一个能够拦截并处理其他对象发送的事件的对象。
  • 通过调用这个函数,可以将filterObj对象安装为当前对象的事件过滤器,从而在事件发送到当前对象之前先被filterObj对象处理。
void removeEventFilter(QObject *obj);:
  • 这个函数用于移除之前安装的事件过滤器。
  • 通过调用这个函数,可以从当前对象中移除之前安装的事件过滤器obj。

dumpObjectTree() const:

  • 将对象及其子对象以树状结构形式输出到调试输出。这对于了解对象的层次结构很有用。

dumpObjectInfo() const:

  • 输出关于对象的信息,包括对象的类名、父对象、自己和子对象的名称。这对于了解对象的基本信息很有用。
setProperty(const char *name, const QVariant &value):
  • 设置对象的属性。属性的名称由 name 参数指定,其值由 value 参数指定。返回 true 表示属性设置成功,返回 false 表示属性设置失败。
*property(const char *name) const:
  • 获取对象的属性值。属性的名称由 name 参数指定。返回属性的值。
dynamicPropertyNames() const:
  • 获取对象的动态属性名列表。
  • 动态属性是在运行时使用 setProperty() 方法添加到对象的属性,而不是在类定义中声明的属性。返回一个 QList,包含对象的所有动态属性的名称。
destroyed(QObject * = nullptr):
  • 这是一个信号,当对象被销毁时发射。它可以用于在对象销毁前执行一些清理工作或通知其他对象。

objectNameChanged(const QString &objectName, QPrivateSignal):

  • 这是一个信号,当对象的名称发生变化时发射。
  • 参数 objectName 是对象的新名称,QPrivateSignal 是一个特殊的类型,用于标识这个信号是通过对象内部触发的,而不是外部调用。
  • 这个信号通常用于在对象名称变化时执行一些相关的操作。
parent() const:
  • 这是一个成员函数,返回对象的父对象指针。
  • 父对象负责管理子对象的生命周期,在父对象被销毁时,会自动销毁其所有子对象。
*inherits(const char classname) const:
  • 这是一个成员函数,用于检查对象是否继承自指定类。
  • 参数 classname 是要检查的类名。如果对象是指定类或其子类的实例,则返回 true;否则返回 false。
deleteLater():
  • 这是一个成员函数,用于安排对象的延迟销毁。
  • 它会将对象的销毁操作放入事件队列中,在下一个事件循环中执行。
  • 这样做的好处是可以确保在删除对象时不会破坏当前正在处理的事件循环,从而避免可能的问题。
  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值