Wie ein QEvent::Close senden?

Alles rund um die Programmierung mit Qt
Antworten
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Wie ein QEvent::Close senden?

Beitrag 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:



Bild



Es passiert aber nichts, wenn ich auf den OK-Button klicke, wo ist mein Fehler? Richtig connected ist alles.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Warum machst Du das nicht mit einem modalen Dialog?
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag von Delryn »

Was ist ein modaler Dialog?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag von Delryn »

Ok, dennoch würde mich interessieren wie das mit den Events denn nun geht :)
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag 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 :roll: :roll: :roll:
Zuletzt geändert von Delryn am 24. Februar 2006 13:24, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Klar kannst Du, es gibt sendEvent und postEvent für sowas.
Antworten