Seite 1 von 1
Wie ein QEvent::Close senden?
Verfasst: 24. Februar 2006 11:29
von Delryn
Hi!
Ich habe ein MainWidget welches ein AboutWidget aufruft.
Wenn das AboutWidget aktiv ist, wird das MainWidget inaktiv.
Wenn das AboutWidget dann irgendwann geschlossen wird (Durch einen OK-Button ODER alt-f4 ODER durch das X oben rechts ODER ...) dann will ich, dass das MainWidget wieder aktiv wird.
Hier ist meine Idee:
Es passiert aber nichts, wenn ich auf den OK-Button klicke, wo ist mein Fehler? Richtig connected ist alles.
Verfasst: 24. Februar 2006 11:44
von macman
Warum machst Du das nicht mit einem modalen Dialog?
Verfasst: 24. Februar 2006 11:46
von Delryn
Was ist ein modaler Dialog?
Verfasst: 24. Februar 2006 11:56
von macman
int QDialog::exec () [slot]
Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.
Users cannot interact with any other window in the same application until they close the dialog.
See also show() and result().
Sieht aus wie das was Du willst.
Verfasst: 24. Februar 2006 12:02
von Delryn
Ok, dennoch würde mich interessieren wie das mit den Events denn nun geht

Verfasst: 24. Februar 2006 12:52
von macman
Also, Events kommen von ganz alleine, die brauchst Du nicht verschicken. Dein AboutWidget ist permanent da und zeigt sich erst, wenn es dazu aufgefordert wird. Eigentlich könntest Du es wieder verstecken, in dem Du den Code aus closeEvent nach OnOk packst. Damit verhinderst Du aber nicht das schliessen mit Esc oder dem Close-Button.
Also mußt Du im closeEvent das schliessen des Widgets abfangen, wie Du es schon machen wolltest. In OnOk muß also ein close() rein, wodurch automatisch ein closeEvent verschickt wird.
In closeEvent mußt Du dann dein Widget verstecken und den Event ablehnen. Das ist das was bei Dir fehlt. Es muß also so aussehen:
Code: Alles auswählen
void CAbout::closeEvent(QCloseEvent* e)
{
hide();
m_pCallerWidget->setEnabled(true);
e->ignore();
}
Jetzt läßt sich das Widget nicht mehr schliessen, sondern wird nur versteckt.
Verfasst: 24. Februar 2006 13:18
von Delryn
Eigentlich genau das, was ich will.
Aber; kann man in Qt denn selbst solche Events verschicken oder ist das gar nicht möglich?
Könnte ich nicht anstatt dem close() einen Event losschicken
// Ich bin so ein Trottel. Überall waren die Signals mit den Slots verknüpft, nur bei diesem Button nicht. Mein Code aus dem Startpost funktioniert also einwandfrei

Verfasst: 24. Februar 2006 13:22
von macman
Klar kannst Du, es gibt sendEvent und postEvent für sowas.