Code:
BookMask *bookMask = new BookMask;
Mask *mask = bookMask;
BookMask *bookMask2 = bookMask;
BookMask *bookMask3 = static_cast<BookMask*>(mask);
Es sieht ganz stark danach aus, das dessen Typ dann Mask ist. Wenn das so ist, ist meine Grundannahme von Typumwandlung falsch.
Code:
class MainWidget : public QWidget {
....
Mask *mask;
Document *document;
}
Werden immer Mask und Document sein. ich kann zwar Objekte abgeleiteter Klasse hinnein casten, doch am Ende werden es immer die Basisklassen Mask und Document bleiben. Und da liegt mein Fehler, ich brauchte es genau anders herrum.
Mit new kann ich Ihnen einen neuen Typ zuweisen, doch stecke ich dann in dem Problem des Signals dessen Herrausgeber ich ja noch löschen muss. welches ich mit deleteLater() versuchen werde zu lösen. Und nach meiner ersten Testung auch funktioniert hat.
Code:
void MainWidget::setDocumentClass( ){
qDebug()<<"void MainWidget::setDocumentClass()";
qDebug()<<"doctype=" << doctype;
qDebug()<<"document="<<document<<"|\tmask="<<mask;
switch(doctype){
/*
case ANIMAL:
qDebug()<<"\ndocument = new AnimalDocument;";
document = (AnimalDocument) new AnimalDocument;
if(!document->start( absolute_document_path ))
doctype = EMPTY;
else
mask->fill(document->getFileContent(), document->getFileInfo());
break;
*/
case BOOK:
qDebug()<<"\nBookDocument";
disconnect(mask, 0, 0, 0);
mask->deleteLater();
mask = new BookMask;
disconnect(document, 0, 0, 0);
document->deleteLater();
document = new BookDocument;
break;
case RECIPE:
qDebug()<<"\n\n\nRecipeDocument";
disconnect(mask, 0, 0, 0);
mask->deleteLater();
mask = new RecipeMask;
disconnect(document, 0, 0, 0);
document->deleteLater();
document = new RecipeDocument;
break;
default:
qDebug()<<"\n\nNo DocType found!";
qDebug()<<"Document";
mask = mask;
document = document;
break;
}
connect( mask, SIGNAL(SigDocTypeChanged( int )),
this, SLOT(DocumentTypeChanged( int )) );
connect( document, SIGNAL(saved( QString )),
this, SLOT(loadDocument( QString )) );
connect( mask, SIGNAL(SigSave()),
this, SLOT(saveDocument()));
qDebug()<<"document="<<document<<"|\tmask="<<mask;
}
Lesezeichen