2015-11-01 125 views
-2

我已经创建了一个新类(QMdiSubWindowMod,它继承自QMdiSubWindow)来传递一个指针数组来抛出一个窗口(每个窗口都有一个不同的指针数组)。然后,我没有任何问题来设置这个指针数组,因为我在创建QMdiSubWindowMod之后立即设置它。通过基类的ptr调用派生类的方法

我的问题是,我想对象的某些属性更改到这些阵列,所以我需要调用通过QMdiAreaactiveSubWindow()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 
+1

显示您的代码。 – Downvoter

+0

显示允许我们重现问题的最小化版本的代码。由于你的问题似乎是一个设计问题,理想情况下,删除所有Qt特定的东西。也看看这个:https://stackoverflow.com/help/mcve – moooeeeep

+0

添加源代码 – Ticki

回答

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

那假设你知道的代码写在返回的对象将有正确的运行时类型的时间。如果获得错误的对象是可能的,你应该使用dynamic_cast然后测试该演员的结果。

+0

感谢提示,它工作正常,谢谢! – Ticki

相关问题