Formular aktualisieren

Alles rund um die Programmierung mit Qt
Antworten
stevju
Beiträge: 5
Registriert: 30. Oktober 2006 16:17

Formular aktualisieren

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wie hast du es bis jetzt gelöst?
stevju
Beiträge: 5
Registriert: 30. Oktober 2006 16:17

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du machst den ganzen Ablauf aber schon per Timer-Programmierung bzw. rufst regelmäßig die Event-Routine auf...
stevju
Beiträge: 5
Registriert: 30. Oktober 2006 16:17

Beitrag 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*
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
stevju
Beiträge: 5
Registriert: 30. Oktober 2006 16:17

Beitrag von stevju »

Wie komme ich aber an das Application Objekt, wenn ich mich in einer Prozedur eines QWidgets befinde?
tachyon
Beiträge: 29
Registriert: 22. Juli 2006 10:03

Beitrag 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();
stevju
Beiträge: 5
Registriert: 30. Oktober 2006 16:17

Beitrag von stevju »

Jetzt klappt alles wunderbar. Danke für die Infos!
Antworten