Seite 1 von 1

[gelöst] Neues Dialogfenster erzeugen

Verfasst: 16. Oktober 2007 13:30
von bw1faeh0
Hallo Leute,

ich möchte über einen Menüpunkt ein neues Dialogfenster öffnen, in dem ich ein paar Einstellungen vornehmen kann.
Kann mir jemand das grundsätzliche vorgehen kurz aufzeigen?
Ich habe es bisher so gemacht:

1) Neue Klasse erzeugt (Header und Implementierung)
+ Klasse "AddViewDialog" von QWidget abgeleitet
+ Konstruktor erstellt, einen QPushButton hinzugefügt
+ Destruktor implementiert

2) Header der Klasse in die Datei eingebunden, die ein Objekt von der neuen Klasse erzeugt

3) mit AddViewDialog *addViewDialog = new AddViewDialog(this) neues Objekt und einen Zeiger darauf erstellt

4) show() und activateWindows() über den Zeiger aufgerufen

Fertig.

Leider sehe ich nicht viel. Das Fenster wurde scheinbar erzeugt, da die restliche Anwendung den Fokus verloren hat und die Menüs nicht mehr erreichbar sind (wahrscheinlich liegt das neue Fenster direkt darüber, aber es ist nicht sichtbar).

Was habe ich wichtiges vergessen?? Habe ich die neue Klasse von der falschen Klasse abgeleitet??

mfg

Christian

Verfasst: 16. Oktober 2007 13:40
von Volker
Also so spontan fällt mir nur auf, dass ein Dialogfenster normalerweise über exec() modal aufgerufen wird. Möchtest Du einen nicht-modales Dialog Fenster sollte das über show() funktionieren. Der Aufruf von activateWindow() dürfte nicht nötig sein. Hab ich zu mindest noch nie verwendet. Durch das dem Dialog Konstruktor übergebene Widget ist eigentlich schon festgelegt, dass es "über" dem Parent zu sehen sein soll. Vorausgesetzt natürlich, Du hast Dein AddViewDialog korrekt implementiert.

Verfasst: 16. Oktober 2007 13:48
von bw1faeh0
Zur Besseren Übersicht habe ich mal noch drei Dateien angehangen

AddViewDialog.h definiert die Klasse des neuen Fensters.
AddViewDialog.cpp implementiert die Klasse des neuen Fensters.
fmbMonitor.cpp erzeugt ein Objekt und soll dieses auch anzeigen.

um langes Suchen in dieser Datei zu vermeiden hier der entsprechende Code:

Code: Alles auswählen

void fmbMonitor::addView()
{
    addViewDialog = new AddViewDialog(this);
    addViewDialog->show();
    addViewDialog->activateWindow();
}
Vielleicht hilft das ja weiter.

Verfasst: 16. Oktober 2007 13:55
von Volker
Dumme Frage: Warum lässt Du deinen AddViewDialog von QWidget erben und nicht von QDialog?
Bei ersterem müsstest Du entsprechende Flags damit es als eigenständiges Widget angezeigt wird selbst setzen.
exec() funktioniert natürlich auch nur wenn es von QDialog erbt.

Sorry hatte das im ersten Posting nicht gelesen, da hattest Du bereits erwähnt, das Du von QWidget ableitest.

Verfasst: 16. Oktober 2007 14:07
von bw1faeh0
Ich weiß nicht, warum ich von QWidegt abgeleitet habe. Wahrscheinlich aus Unwissenheit, dass es QDialog gibt...

Danke, das wars.

Kaum macht man es richtig, da geht es ;)