QDialog/ keine Transparenz über Aufruf mit exec()

Alles rund um die Programmierung mit Qt
Antworten
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

QDialog/ keine Transparenz über Aufruf mit exec()

Beitrag von QtNoob2008 »

Hallo Qtler,

habe folgendes Problem:
Ich möchte einen modalen Dialog erstellen der einen
halbtransparenten Hintergrund besitzt (Meine Klasse erbt von QDialog).
Wird der Dialog über

Code: Alles auswählen

dialog->show() 
aufgerufen, so funktioniert das Setzen der Transparenz innerhalb des Dialogs
(über eine Palettenveränderung und Zuweisung).
Über

Code: Alles auswählen

dialog->exec()
wird der Hintergrund aber schwarz und zudem befindet sich der Dialog außerhalb des Hauptfensters ...
Welche Möglichkeiten existieren den Dialog wieder halbdurchsichtig darzustellen. Die Postionsanpassung läßt sich ja über die Abfrage der Hauptfensterposition realisieren und entsprechend anpassen nehme ich mal an, nur bei der Transparenz haut es nicht so hin. Hab versucht dies als erstes zu lösen.

Wer kann mir helfen und gibt mir nen Tipp?

Gruß QtNoob
close1
Beiträge: 39
Registriert: 9. April 2008 14:28
Kontaktdaten:

Beitrag von close1 »

Hi,
Du willst den Dialog als Unterfenster von deinem Hauptffenster starten?

exec() schmeißt den Event(signals&slots) handler an, der sich dann in einer Schleife(bis zum schließen oder terminieren usw.) aufhängt.

Mir fallen grade 2 Möglichkeiten ein:

1. Du startest den dialog als eigenes Programm, unschön aber simpel.

oder 2. Du nimmst dir nen QProcess und startest den Dialog als eigenen Prozess.

mhh mir kommt es irgendwie so vor als ob ich grad um die Ecke denken würde ... da war noch irgend eine andere Möglichkeit...
MfG

close1
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

Beitrag von QtNoob2008 »

ja genau, möchte den modalen Dialog von meinem Hauptfenster starten.
das Hauptfenster soll dann inaktiv sein. Richtig, das mit dem exec() funktioniert auch wunderbar, also dass das Hauptfenster keine Events mehr erhält.

Das Problem mit der Postion habe ich gerade beseitigt, also dass der Dialog sich nicht im Darstellungsbereich des Hauptfensters/ Anwendung befindet. Über die Positionsabfrage mit

Code: Alles auswählen

this->frameGeometry().x() und this->frameGeometry().y() 
des Hauptfensters und der Positionsfestlegung des Dialoges funktioniert dies nun...

Zu 1.) Wie mache ich das, habe ich noch nicht gemacht :?

Zu 2.) Ist ein eigener Prozess nicht in dem Sinne ein eigenes Programm ??
close1
Beiträge: 39
Registriert: 9. April 2008 14:28
Kontaktdaten:

Beitrag von close1 »

QtNoob2008 hat geschrieben:ja genau, möchte den modalen Dialog von meinem Hauptfenster starten.
das Hauptfenster soll dann inaktiv sein. Richtig, das mit dem exec() funktioniert auch wunderbar, also dass das Hauptfenster keine Events mehr erhält.

Das Problem mit der Postion habe ich gerade beseitigt, also dass der Dialog sich nicht im Darstellungsbereich des Hauptfensters/ Anwendung befindet. Über die Positionsabfrage mit

Code: Alles auswählen

this->frameGeometry().x() und this->frameGeometry().y() 
des Hauptfensters und der Positionsfestlegung des Dialoges funktioniert dies nun...

Zu 1.) Wie mache ich das, habe ich noch nicht gemacht :?

Zu 2.) Ist ein eigener Prozess nicht in dem Sinne ein eigenes Programm ??
Zu 1. naja du schreibst ein Programm das den Dialog enthält. Und je nach Parametern was anderes macht(oder so). Dann rufst du das ganze mit Parametern auf. Und wertest die rückgabe des Programms aus, oder so etwas in der Richtung

Zu 2. nicht ganz, bei Qt ist das so, dass ein Vorgang(eine schleife etc.) einem anderem Prozess zugeordnet wird damit das interface noch reagiert während die Schleife läuft..
MfG

close1
QtNoob2008
Beiträge: 54
Registriert: 10. April 2008 08:27

Beitrag von QtNoob2008 »

Zu 1.) Ok, ich glaube das scheidet aber doch aus, weil ich nicht abschätzen kann, ob das verhalten (Geschwindkeit etc.) so ist wie es sein soll.

Zu 2.) Werde mir mal die Klasse QProcess mal ansehen!
Vielen Dank für die Hilfe

Gruß QtNoob2008
Antworten