grazie shodan, ho letto l'articolo grazie ma il problema mi sembra diverso:
ho creato una classe CViewBase che implementa alcune funzionalità , tra cui GetActions
codice:
class CORE_ITEM CViewBase : public COpenObject
{
public:
CViewBase(void);
~CViewBase(void);
virtual void GetActions(QVector<itemActionCommand*>& pViewAction)= 0;//è un vector contente una serie di oggetti strutture itemActionCommand
};
typedef std::shared_ptr<CViewBase> ptrViewBase;
}
ho diverse classi deriate da CViewBase e vorrei implementare il polimorfismo su tutto l'albero di derivazione da CViewBase.
CViewBase è una view, presenta dei dati ma contiene questa funzione:
codice:
virtual void GetActions(QVector<itemActionCommand*>& pViewAction)= 0;//è un
ogni view derivata da CViewBase implementa la funzione GetActions che mi ritorna un array di oggetti command da inserire in un menu.
In pratica vorrei che quando seleziono una view, automaticamente mi si aggiornano le azioni(in menu' o tasti della toolbar) che quella view puo compiere.
specifico per capirci meglio(ma mi sono reso conto che ho spiegato un po male) che ho creato la CViewBase in un progetto dll CORE mentre le classi derivate sono sotto un progetto QT .exe e un altro progetto con interfaccia grafica in opengl .exe.
La view generica deve essere in una dll comune ai due sottosistemi.
Solo che quando richiama da una view derivata il metodo virtuale GetActions non entra nelle funzioni di nessuna delle due classi delle due gui.
Se creo invece un metodo non virtuale nella classe base CViewBase entra , esegue e ritorna il vettore(ho provato sia un vettore stl che un vettore QT).
questa è una delle classi derivate dalla view , eredita anche da qglwidget che è il widget opengl di qt(puo dare problemi l'eredità multipla?)
codice:
class CGlWidgetImage : public CViewBase, public QGLWidget
{
public:
CGlWidgetImage(ptrFactoryCommand ptrFactory, ptrModelQT ptrMod, ptrModel ptrGraphicsModel, ptrControllerQt ptrController, QGLFormat format);
void GetActions(QVector<itemActionCommand*>& pVect);
grazie.