Seite 1 von 1

Formular aktualisieren

Verfasst: 30. Oktober 2006 16:32
von stevju
Hallo,

Ich habe mit QT ein Programm geschrieben, welches folgendermaßen ablaufen sollte:

- Startbildschirm anzeigen
- Sobald von einem anderen Modul ein gewisses Signal gesendet wird:
- Labelinhalte auf "" setzen und Formular und 1 Grafik anzeigen
- Label1 anzeigen -> entsprechende Audiodatei abspielen
- danach Label2 anzeigen -> entsprechende Audiodatei abspielen
- dasselbe mit Label3 und Label 4
- Verarbeitung von Benutzereingaben

Das sollte in etwa so funktionieren wie bei einer PowerpointPräsentation.

Allerdings habe ich das Problem, dass zuerst die Sounds abgespielt werden und erst danach der Bildschirm gezeichnet und somit alle Texte gleichzeitig erscheinen und während der Audiowiedergabe nur ein unvollständiges Formular angezeigt wird.

Wie kann ich dieses Problem lösen?

Verfasst: 30. Oktober 2006 18:14
von upsala
Wie hast du es bis jetzt gelöst?

Verfasst: 30. Oktober 2006 18:17
von stevju
Momentan habe ich gedacht es funktioniert einfach indem ich es in der Prozedur eintrage und vor dem Abspielen jeweils ein Repaint() aufrufe.
So einfach funktioniert es aber leider nicht.

Verfasst: 30. Oktober 2006 19:31
von upsala
Du machst den ganzen Ablauf aber schon per Timer-Programmierung bzw. rufst regelmäßig die Event-Routine auf...

Verfasst: 31. Oktober 2006 09:47
von stevju
Leider ist das eines meiner ersten QT-Programme und ich muss mich erst von Java her umgewöhnen. Könntest du mir erklären wo im Prinzip das Problem liegt oder wie es richtig zu lösen wäre, weil ich das Eventkonzept von QT noch nicht richtig durchblicke.

Timer habe ich keine verwendet, weil ich einfach hoffte, dass die Funktion statisch der Reihe nach abgearbeitet wird: also Anzeige -> Wiedergabe -> Anzeige ->Wiedergabe ...

Einen Timer einzubauen dürfte nicht das Problem sein, aber ich verstehe nicht wie QT den Bildschirmbau behandelt. Wenn ich die Text-Property eines Labels erstellen, wird dann nicht indirekt das Formular angewiesen die Änderung auch sichtbar zu machen?

*confused*

Verfasst: 31. Oktober 2006 11:56
von macman
Das repaint reicht auch nur das Komando weiter. Damit der Bildschirm neu gemalt wird, muss auch mal das System dran kommen, bzw. Qt muss die Events mal bearbeiten. Pack mal hinter das repaint ein qApp->processEvents() oder so ähnlich, dann sollte es klappen.

Verfasst: 31. Oktober 2006 12:23
von stevju
Wie komme ich aber an das Application Objekt, wenn ich mich in einer Prozedur eines QWidgets befinde?

Verfasst: 31. Oktober 2006 13:16
von tachyon
QApplication ist eine Singleton-Objekt mit globalem Zugriff. Da kannste entweder über den globalen Objektzeiger qApp drauf zugreifen, oder Du holst Dir einen Pointer über die statische Methode instance() von QCoreApplication.

also entweder

Code: Alles auswählen

qApp->bla();
//oder
QApplication *theApp = QCoreApplication::instance();
theApp->bla();

Verfasst: 31. Oktober 2006 14:53
von stevju
Jetzt klappt alles wunderbar. Danke für die Infos!