Seite 1 von 1

[gelöst] QMessageBox lässt sich nicht mit X schließen

Verfasst: 15. Januar 2008 14:22
von Bagstone
Tag zusammen,

ich habe eine QMessageBox in mein Programm eingebaut und nun das Problem, dass ich sie mit einem Klick auf das X nicht schließen kann. Die QMessageBox hat das WindowFlag alwaysontop, aber auch wenn ich das wegnehme ändert sich nix.

Code: Alles auswählen

QMessageBox askForUpdate;
askForUpdate.setWindowTitle(tr("Update available"));
askForUpdate.setText(tr("A new update is available.\n"
	   "Do you want it to be downloaded and installed automatically,\n"
	   "visit the website to download manually or do nothing now?"));
askForUpdate.addButton("&Automatically", QMessageBox::AcceptRole);
askForUpdate.addButton("&Nothing", QMessageBox::DestructiveRole);
askForUpdate.addButton("&Manually", QMessageBox::RejectRole);
askForUpdate.setWindowFlags(Qt::WindowStaysOnTopHint);
askForUpdate.activateWindow();
askForUpdate.setFocus();
askForUpdate.exec();
Jemand eine Idee?
Hab über die Foren-Suche nix zu dem Thema gefunden.

Verfasst: 15. Januar 2008 15:43
von Christian81
Ich glaube die Funktion setWindowFlags heisst nicht umsonst so - alle anderen Flags werden dabei gelöscht. --> setWindowFlags(windowFlags() | myFlag)

Verfasst: 15. Januar 2008 15:49
von Bagstone
Sorry, das ist im Originalpost wohl untergegangen:
Auch wenn ich diese Anweisung komplett rausnehme, geht es nicht. Und ich finde keinen WindowFlag, der das schließen per X verhindert/ermöglicht... hab auch schon in die Qt Sourcen geschaut weil bei einer statischen QMessageBox::warning() geht das, aber nix gefunden.

Verfasst: 15. Januar 2008 16:37
von Christian81
Es funktioniert nicht mehr sobald mehr als ein Button angezeigt wird da dann nicht ersichtlich ist, welcher der Buttons gedrückt wurde. Habs gerade ausprobiert.

Verfasst: 15. Januar 2008 17:39
von Bagstone
Danke, dass war ein guter Tipp ;-)

Ein Blick in die richtige Stelle des Qt sourcecodes hat mich dann völlig aufgeklärt:

Entweder man macht a) nur einen Button in seine MessageBox oder b) einen StandardButton der Form "QMessageBox::Cancel", dann wird das klicken des X auf diesen umgeleitet. Hab den Button "Nothing" nun dadurch ersetzt und jetzt geht es.

Vielen Dank dir mal wieder :-)