Seite 1 von 1

Widget immer im Vordergrund

Verfasst: 10. November 2010 15:54
von darkshine
Hallo Forum,


ich möchte gerne ein Widget im Vordergrund lassen, bis es geschlossen wird. (Genau wie bei einem QDialog)
Wenn ich also auf das hintere Widget klicke, dann soll dies nicht in den Vordergrund gerückt werden.
Dies ist bestimmt mit einem einfachen Befehl gemacht, aber ich finde diesen einfach nicht :(

Vielen Dank

Verfasst: 10. November 2010 19:35
von padreigh
schau mal bei Qt::WindowFlags .. das ist der 2te parameter beim QWidget konstruktor ... da kannste sowas finden http://doc.qt.nokia.com/4.7/qt.html#WindowType-enum

Verfasst: 11. November 2010 07:44
von darkshine
Vielen Dank,

das hat mich auf den richten Weg gebracht.
Das was ich gesucht habe war

fenster->setWindowModality(Qt::ApplicationModal);

dies eignet sich super, wenn man z.B "Sind Sie sicher?" abfragen will. Bevor dann nicht auf "Ja" oder "Nein" gedrück wird, passiert nix.

Verfasst: 11. November 2010 08:03
von solarix
darkshine hat geschrieben:..
dies eignet sich super, wenn man z.B "Sind Sie sicher?" abfragen will. Bevor dann nicht auf "Ja" oder "Nein" gedrück wird, passiert nix.
Jetzt bin ich verwirrt.. genau dazu sind doch die QDialoge super geeignet:

Code: Alles auswählen

QMessageBox::question(&x,"MyApplication","Speichern?",QMessageBox::Yes | QMessageBox::No);

Verfasst: 11. November 2010 08:24
von darkshine
Oh ja,

na jetzt für das nächste Fenster bin ich schlauer :-)

Jetzt möchte ich noch den "roten" Schließbutton irgendwie ausblenden. Damit ich sicherstellen kann, das erst nach der "Ja" oder "Nein" Auswahl, das Fenster geschlossen wird.
Und gibt es eine Möglichkeit mein Hauptfenster in der Zeit irgendwie abzudunkeln oder unscharf zu machen? Wäre nur etwas für die Optik. Also es sollte jetzt nicht zu aufwendig werden, aber vllt gibt es ja auch hierfür einen simplen Befehl

Verfasst: 11. November 2010 08:33
von solarix
Das geht IMHO auch wieder über die WindowFlags (Qt::WindowCloseButtonHint).. Aber mich als Anwender würde das glaube ich nicht stören. Das Schliessen eines Ja/Nein-Dialoges würde ich als "Abbrechen" interpretieren (also weder ja noch nein, sondern die Applikation nicht schliessen).

Die QDialog-Variante hat (auf diesem Mac) übrigens keine solche Bedienelemente (Min/Max/Close). Also gleich noch ein Problem, welches du mit QDialog nicht hättest..

Verfasst: 11. November 2010 09:19
von darkshine
Damit klappt es

fenster->setWindowFlags( Qt::CustomizeWindowHint | Qt::WindowTitleHint);

Verfasst: 11. November 2010 14:04
von darkshine
Nachdem alles klappt.
der verschwommene Hintergrund kann mit QGraphicsBlurEffect erreicht werden.

QGraphicsBlurEffect *effect = new QGraphicsBlurEffect (this);
effect->setBlurHints(QGraphicsBlurEffect::QualityHint);
effect->setBlurRadius(5);
fenster->setGraphicsEffect(effect);

Jetzt habe ich ein neues Problem. Mein Fenster ist ca. 300 * 200 pixel groß und man kann es beliebig verschieben.
Wenn ich jetzt durch einen Button ein neues fenster z.B 50*50 groß öffne, dann soll es in der Mitte meines "Hauptfensters" angezeigt werden.
Kann ich das irgendwie realisieren?

Vielen Dank

Verfasst: 11. November 2010 14:29
von DBGTMaster
du könntest die x und y koordinate sowie höhe und breite des hauptfensters ermitteln und davon die position des popups berechnen.

Verfasst: 11. November 2010 14:46
von darkshine
ja klappt super

falls jemand Interesse daran hat, hier meine drei zeilen :-)

int x = hauptfenster->x();
int y = hauptfenster->y();

popup->move(x + hauptfenster->width()/2 - popup->width()/2, y + hauptfenster->height()/2 - popup->height()/2);

Vielen Dank

Verfasst: 11. November 2010 19:27
von padreigh
Du machst es dir unnötig kompliziert ... nutz eine QMessageBox oder einen QDialog und setz als parent dein Fenster, dann wird es automatisch zentriert ... wenn du den QDialog mit .exec() startest ist er auch automatisch modal - die QMessageBox ist es sowieso ...