ich habe eine klasse die eine gui darstellt. ich erzeuge in einer anderen klasse ein objekt davon. dann habe ich die closeEvent funktion reimplementiert. wenn ich das ganze kompilieren möchte bekomme ich einen linker error.
void GUI_Converter::closeEvent(QCloseEvent *event)
{
int value = QMessageBox::warning(this, tr("Close"),tr("Are you sure ?"),QMessageBox::Yes,QMessageBox::No);
if(value == QMessageBox::Yes)
{
emit closeAll();
event->accept();
}
else
{
event->ignore();
}
}
wenn also der user die gui schliessen möchte wird closeAll() emittet und in der controller klasse converter sollen alle laufenden routinen unterbrochen werden und alles sauber verlassen werden. einen gleichwertigen funktionsaufrif kann ich nicht machen, da die gui klasse die converterklasse nicht kennt. wie muss ich bei dieser problemstellung am besten vorgehen ?
Du hast das Q_OBJECT in der Klassendefinition vergessen. Danach aber bitte auch noch den Header unter HEADERS in der .pro eintragen.
BTW: Du kannst nicht davon ausgehen, dass das Fenster-Objekt tot ist, nachdem closeEvent() durch ist. Bei gesetztem Qt::WA_DeleteOnClose ja (wenn du das CloseEvent accept()ierst). Ansonsten solltest du das in den Destruktor packen. Vor allem wenn das Objekt noch in einer anderen Klasse liegt (auch Gui, MainWindow evtl?), würde ich es nicht übers closeEvent machen. Wenn sich eh die andere Klasse (Controller), die dann das Signal abfangen soll, um das schließen der laufenden Routinen kümmern soll, mach das doch direkt in deren Destruktor. Ohne SIGNAL/SLOT. Und schau dass dein Controller auch wirklich zerstört wird. Die MessageBox sollte natürlich im closeEvent() bleiben, bei Accepted machst du ein qApp->quit().