通过基类的 ptr 调用派生类的方法
Call a derived class's method through the base class's ptr
我创建了一个新类(继承自QMdiSubWindow
的QMdiSubWindowMod
)来传递指针数组抛出一个窗口(每个窗口都有不同的指针数组)。然后,我设置这个指针数组没有任何问题,因为我在创建QMdiSubWindowMod
之后就设置了它。
我的问题是,我想把对象的一些属性改成这些数组,所以我需要通过QMdiArea
的activeSubWindow()
调用QMdiSubWindowMod
方法,而这个方法实际上返回了QMdiSubWindow
对象的指针,而我不能通过QMdiSubWindow
对象的这个指针调用我的QMdiSubWindowMod
方法
我如何通过QMdiSubWindow
的指针调用我的方法,或者你有什么技巧可以让它工作?提前感谢您的回答。
QMdiSubWindowMod.h
:
#include <QtWidgets/QtWidgets>
#include "qcustomlabel.h"
class QMdiSubWindowMod : public QMdiSubWindow
{
Q_OBJECT
public:
explicit QMdiSubWindowMod(QWidget * parent = 0, Qt::WindowFlags flags = 0);
void setList(QCustomLabel list[80]);
QCustomLabel* list();
~QMdiSubWindowMod();
private:
QCustomLabel m_list[80];
};
QMdiSubWindowMod.cpp
:
#include "qmdisubwindowmod.h"
QMdiSubWindowMod::QMdiSubWindowMod(QWidget * parent, Qt::WindowFlags flags)
: QMdiSubWindow(parent, flags)
{
}
QMdiSubWindowMod::~QMdiSubWindowMod()
{
}
QCustomLabel* QMdiSubWindowMod::list()
{
QCustomLabel *list = new QCustomLabel[80];
for (int i = 0; i < 80; i++) list[i] = m_list[i];
return list;
}
void QMdiSubWindowMod::setList(QCustomLabel list[80])
{
for(int i=0; i<80; i++)
{
m_list[i] = list[i];
}
}
当我写论点时(我在这里没有任何问题):
QMdiSubWindowMod *onglet = new QMdiSubWindowMod(m_mainArea);
onglet->setList(list);
我需要读取方法(.cpp)的位置:
QCustomLabel *list[80];
QMdiSubWindowMod *onglet = m_mainArea->activeSubWindow(); //Problem here because of the type of return which is a QMdiSubWindow and not a QMdiSubWindowMod
QMdiSubWindowMod *onglet = static_cast<QMdiSubWindowMod*>( m_mainArea->activeSubWindow() );
这假设您在编写代码时知道返回的对象将具有正确的运行时类型。如果可能得到错误的对象,那么应该使用dynamic_cast
,然后测试该强制转换的结果。
相关文章:
- 使用基类中的派生方法运行线程,而无需使用模板
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 无法实例化抽象类,但类不是抽象/派生方法的参数
- 使用库中的基础级别中的派生方法
- 如何通过功能指针调用派生方法
- C++ shared_ptr从派生方法返回此值
- C 基本方法称为而不是派生方法
- 可视化C++对象被上投射到基类;无法调用派生方法
- C++ 继承函数指针,可与派生方法一起使用
- 基本方法被调用而不是派生方法
- 正在调用基方法,而不是从构造函数派生方法
- 具有显式派生方法的C++接口
- 正在调用派生方法而不是Base
- 继承方法,派生方法调用的不是基
- 使用不在基类中的派生方法
- 如何使用基指针访问派生方法
- 是否可以显式使用祖先的虚拟类方法作为派生方法?
- 中的派生方法未在基类中调用
- 从基指针调用派生方法
- 从基类调用基类中不存在的派生方法