通过基类的ptr调用派生类的方法
问题描述:
我已经创建了一个新类(QMdiSubWindowMod
,它继承自QMdiSubWindow
)来传递一个指针数组来抛出一个窗口(每个窗口都有一个不同的指针数组)。然后,我没有任何问题来设置这个指针数组,因为我在创建QMdiSubWindowMod
之后立即设置它。通过基类的ptr调用派生类的方法
我的问题是,我想对象的某些属性更改到这些阵列,所以我需要调用通过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
然后测试该演员的结果。
+0
感谢提示,它工作正常,谢谢! – Ticki
显示您的代码。 – Downvoter
显示允许我们重现问题的最小化版本的代码。由于你的问题似乎是一个设计问题,理想情况下,删除所有Qt特定的东西。也看看这个:https://stackoverflow.com/help/mcve – moooeeeep
添加源代码 – Ticki