Widget immer im Vordergrund

Alles rund um die Programmierung mit Qt
Antworten
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Widget immer im Vordergrund

Beitrag 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
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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);
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag von darkshine »

Damit klappt es

fenster->setWindowFlags( Qt::CustomizeWindowHint | Qt::WindowTitleHint);
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Beitrag 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.
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag 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
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag 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 ...
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Antworten