2015-11-01 4 views
-2

Я создал новый класс (QMdiSubWindowMod, который наследует от QMdiSubWindow), чтобы передать массив указателей, бросая окно (каждое из этих окон имеет другой указательный массив). Тогда у меня нет никаких проблем, чтобы установить этот массив указателя, потому что я установил его сразу после создания QMdiSubWindowMod.Вызвать метод производного класса через базовый класс ptr

Моя проблема заключается в том, что я хочу изменить некоторые свойства объекта в этих массив, поэтому мне нужно вызвать метод QMdiSubWindowMod через 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]; 
    } 
} 

Когда я пишу аргумент (у меня нет никакой проблемы здесь):

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

Смежные вопросы