[gelöst] Neues Dialogfenster erzeugen

Alles rund um die Programmierung mit Qt
Antworten
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

[gelöst] Neues Dialogfenster erzeugen

Beitrag 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
Zuletzt geändert von bw1faeh0 am 16. Oktober 2007 14:07, insgesamt 1-mal geändert.
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag 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.
Dateianhänge
fmbmonitor.cpp
(8.25 KiB) 133-mal heruntergeladen
AddViewDialog.h
(1.78 KiB) 125-mal heruntergeladen
AddViewDialog.cpp
(1.95 KiB) 138-mal heruntergeladen
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag 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.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag 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 ;)
Antworten