2015-11-01 97 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

相關問題