QLabel wird nicht angezeigt
-
Unter Qt eröffne ich einen QDialog, mache ein show und führe einige Suchoperationen
durch.
Eigentlich sollte in dem QDialog während der Suchoperation der Text "Bitte Warten"
mittels eines QLabel angezeigt werden, aber es wird überhaupt kein Text angezeigt,
nur das leere Fenster.
Wieso ? bzw. was kann ich dagegen tun ?Code-Ausschnitt:
...
setGeometry(x,y,b,h);
setCaption(titel);
setPaletteBackgroundColor(COLORREF CLRED);
mlab=new QLabel(titel,this);
mlab->show();
show();Das Fenster wird angezeigt, aber:
Dieser mlab->show()-befehl zeigt aber kein label.
Selbst wenn ich noch ein
mlab->setGeometry(1,1,150,15);
einfüge: nichts wird angezeigtAnmerkung:ich habe dasgleiche auch schon in einem QFrame mit einem
Popup versucht:ebenfalls wird kein Label angezeigt (wohl aber das Popup).Ich vermute, dass es daran liegt, dass ich direkt nach dem Aufruf des Dialogs im Programm weitermache(=suche), und dem Fenster nicht genug
Zeit zum Zeichnen lasse(zumindest unter WINDOWS gibt es diesen Effekt auch)
-
Vielleicht musst du einfach zwischendurch alle Events abarbeiten lassen. (QApplication::processEvents)
-
processEvents ist schon die richtige Idee.
Die Frage ist, wann weiss ich, dass alle events abgearbeitet sind ?
Bisher habe ich es mit einem Time-Loop versucht und es sah gut aus.
Aber ich denke, irgendwie muss ich doch abfragen können, ob noch ein
Event anliegt oder nicht ? Nur eine Zeitschleife ist nicht die eleganteste Lösung.
-
1. Ich würde mir mal im Qt3 Buch das Kapitel über Event Processing und ganz besonders Responsiveness durchlesen.
2. Es gibt die Methode hasPendingEvents()
3. Ich würde das ganze mit Threads machen. Die Suche wird einfach in einem eigenen Trhead durchgeführt, so dass die GUI vernünftig weiterlaufen kann.
-
Ich würde dir empfehlen mal die Klasse QLayout anzuschauen.
Bzw. die Klassen QVBoxLayout und QHBoxLayout.
Damit ersparst du dir setGeometry() und show() aufzurufen.
Außerdem sollte das dein Problem schon lösen.Ponto schrieb:
Ich würde das ganze mit Threads machen. Die Suche wird einfach in einem eigenen Trhead durchgeführt, so dass die GUI vernünftig weiterlaufen kann.
Würde ich auch machen! Da du bei Suchen die etwas länger dauern dem User die Möglichkeit geben solltest das ganze auch Abzubrechen.
-
Ponto schrieb:
1. Ich würde mir mal im Qt3 Buch das Kapitel über Event Processing und ganz besonders Responsiveness durchlesen.
Im gleichen Kapitel wird auch die nette Klasse QProgressDialog erwähnt. Das wär doch was für dich.
-
Ja, mit hasPendingEvents funktioniert es nun.
QProgress... hatte ich mittlerweile mal angeschaut.
Die Verwendung von QLayout mag vielleicht dieses Problem
umgehen, da ich aber einen eigenen Masken-Generator verwende
(meine Software läuft unter verschiedenen Betriebssystemen)
muss die Parametrierung extern, d.h. ausserhalb vom Programm, erfolgen.
D.h. die Feld-Definitionen, usw. liegen überhaupt nicht in der Software.
Und deshalb machen automatische Layout-Konstruktionen bei mir nur Probleme.Dankeschön für die Unterstützung !