gpt4 book ai didi

c++ - 如何知道一个类是否继承了其他抽象类?

转载 作者:太空狗 更新时间:2023-10-29 23:35:05 25 4
gpt4 key购买 nike

我有一个继承QWidget 的抽象Draggable 类。另外两个类继承Draggable:

             QWidget
|
Draggable (abstract)
/ \
/ \
Class1 Class2

在主窗口中,在鼠标按下事件中我想知道被点击的子对象是否是Draggable:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
QWidget *childWid = childAt(event->pos());
if (!childWid)
return;

// if Draggable is not abstract I can do as below
/*
Dragable *obj = new Dragable;
if (!childWid->metaObject()->inherits(obj->metaObject()))
return;
*/
}

我可以通过将 childWid->metaObject()->className()Class1Class2 进行比较来检查,但是 Draggable 有很多 child 。所以我想知道如何找出 child 是否继承了Draggable

最佳答案

另一种方法是使用 qobject_cast函数,类似于 dynamic_cast,但仅适用于 QObjects。使用 qobject_castdynamic_cast 的好处在于,即使禁用 RTTI,前者也能正常工作。

前提是您的Draggable 类应该直接或间接继承QObject,它实际上继承了QObject,并用Q_OBJECT 宏声明。即

class Draggable : public QWidget
{
Q_OBJECT
[..]
};

在你的例子中:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
QWidget *childWid = childAt(event->pos());
if (!childWid)
return;

// if Draggable is not abstract I can do as below
if (!qobject_cast<Draggable *>(childWid))
{
// Not a Draggable
return;
}
}

关于c++ - 如何知道一个类是否继承了其他抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48377930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com