通过基类的ptr调用派生类的方法

时间:2015-11-01 11:13:25

标签: c++ qt

我创建了一个新类(QMdiSubWindowMod继承自QMdiSubWindow)以传递一个指针数组抛出一个窗口(每个窗口都有一个不同的指针数组)。然后,设置这个指针数组我没有任何问题,因为我在创建QMdiSubWindowMod之后立即设置了它。

我的问题是我想将对象的某些属性更改为这些数组,因此我需要通过QMdiSubWindowMod的{​​{1}}调用activeSubWindow()方法,此方法实际返回QMdiArea对象的指针,我无法通过QMdiSubWindow对象的此指针调用我的QMdiSubWindowMod方法。
如何通过QMdiSubWindow的指针调用我的方法,或者有任何提示使其有效?提前感谢您的回答。

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];
    }
}

我需要阅读方法(.cpp):

QMdiSubWindowMod *onglet = new QMdiSubWindowMod(m_mainArea);
onglet->setList(list);

1 个答案:

答案 0 :(得分:1)

QMdiSubWindowMod *onglet = static_cast<QMdiSubWindowMod*>( m_mainArea->activeSubWindow() );

假设您在编写代码时知道,返回的对象将具有正确的运行时类型。如果可能出现错误的对象,则应使用dynamic_cast然后测试该转换的结果。