Hallo zusammen,
ich habe ein sonderbares Problem mit einer QListView. Wenn ich eine Listview erzeuge und noch vor dem eigentlichen Anzeigen mit Daten (QListViewItems) fülle, zeigt diese View nach dem Öffnen über der Titelleiste und dem ersten Item ein graues Feld an (etwa 120px Breit und 40 px hoch). (siehe Attachment). Ein Repaint hilft nicht. Wenn ich jedoch erst das Fenster öffne und dann die Items in die Liste einfüge funktioniert alles wunderbar.
Hat jemand vielleicht eine Idee woran das liegen könnte?
OS: Debian Sarge
QT: 3:3.3.4-3
Greetz Yakin
Probleme mit QListView
Probleme mit QListView
- Dateianhänge
-
- qlistview.jpg (25.58 KiB) 3149 mal betrachtet
-
ArneStocker
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
das schaut so aus, als hättest Du irgendein QLabel oder ein anderes Widget erzeugt und dabei das betreffende QListView - Objekt als parent angegeben. Da QListView ja mindestens ein weiteres Unterfenster (Viewport) verwaltet, dessen Nullpunkt ebenfalls links oben liegt (meistens kommt noch der QHeader dazu) könnte das das seltsame Verhalten erklären.
Mach doch mal spassenshalber in der ersten Variante
Der Begriff 'Your File:' sieht nicht nach QT sondern nach einer eigenen Implementation aus. Such doch mal Dein Projekt (einschliesslich der moc_.. .cpp dateien, falls Du das Widget im Designer gebaut hast) nach dem Begriff 'Your File:' durch und kriege heraus, in welchem Verhältnis das dann gefundene Widget zu Deinem QListView - Objekt steht.
Gruss Arne
Mach doch mal spassenshalber in der ersten Variante
Code: Alles auswählen
pListView->viewport()->setActiveWindow()
Gruss Arne
Hallo Arne,
das mit dem QLabel schien mir zuerst auch das Plausibelste. Ich habe etwa 1,5 Stunden gesucht und nichts gefunden. Danach habe ich in einer anderen Maske die auch ein ListView enthielt, einfach einmal ein Item vor dem Öffnen der Maske hinzugefügt und hatte den selben Effekt.
Your Files ist ein eigenständiges Label. Keine Auffälligkeiten in UI. Wenn ich das entferne habe ich den selben Effekt.
Ich habe deine Variante mal ausprobiert. Habe aber nichts auffälliges feststellen können. Was soll das denn eigentlich bewirken? Ich habe das mit dem Viewport noch nicht so ganz verstanden...
Vielleicht kannst Du mir die Codezeile noch ein wenig erläutern?
Gruß
Yakin
das mit dem QLabel schien mir zuerst auch das Plausibelste. Ich habe etwa 1,5 Stunden gesucht und nichts gefunden. Danach habe ich in einer anderen Maske die auch ein ListView enthielt, einfach einmal ein Item vor dem Öffnen der Maske hinzugefügt und hatte den selben Effekt.
Your Files ist ein eigenständiges Label. Keine Auffälligkeiten in UI. Wenn ich das entferne habe ich den selben Effekt.
Ich habe deine Variante mal ausprobiert. Habe aber nichts auffälliges feststellen können. Was soll das denn eigentlich bewirken? Ich habe das mit dem Viewport noch nicht so ganz verstanden...
Gruß
Yakin
-
ArneStocker
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
Hallo Yakin
also, dass kommt mir ja ziemlich spanisch vor. Ich programmiere nun permanent mit den Listviews und werfe da vor dem ->show() und mittendrin und gelegentlich auch nach einem ->hide() alle möglichen QListViewItems rein und wieder raus, aber das habe ich noch nie gesehen.
Es gibt ja nur zwei Möglichkeiten
Entweder stammt das childfenster (wenn da eins ist) von Dir (absichtlich oder nicht) oder es ist bestandteil der Implementierung des QListView (was ich nicht glauben mag).
Die Antwort habe ich nicht richtig verstanden. Hast Du irgendwas (zum rauswerfen?) gefunden oder nicht ? Gibt es denn ein QLabel mit so einem Text ? Baust Du Deinen Dialog im Designer oder zu Fuss ?
Such doch mal mit pListView->queryList() nach allen Kinder und Enkelkinder (-Objekten) des ListView und lass dir über pObject->className() mitteilen, wie die alle heissen. Da sollte sich eigentlich was finden lassen.
Und da ich nach wie vor nicht glauben mag, dass dieser Text sozusage zur Grundausrüstung eines QListView gehört (zumindest habe ich noch nie was davon gesehen), wird sich auch irgendwo eine Stelle finden, an der das Objekt mehr oder weniger unabsichtlich eingebettet wird (vielleicht ein ungültiger oder falsch initialisierter Pointer ?) . Hast Du eine Volltextsuche über Dein Projekt gemacht ?
Ansonsten poste doch mal einen Ausschnitt des relevanten Programmcodes
Gruss Arne
PS: für den Fall, dass Du den Dialog im Designer erzeugst:
ich hab's auch schon mal erlebt, dass das *ui File korrupt ist, was man aber nicht immer sofort bemerkt. Allerdings solltest Du dann in der Basisklasse den Fehler finden können. Bau (für diesen Fall) Deinen Dialog doch einfach nochmal vollständig neu auf.
also, dass kommt mir ja ziemlich spanisch vor. Ich programmiere nun permanent mit den Listviews und werfe da vor dem ->show() und mittendrin und gelegentlich auch nach einem ->hide() alle möglichen QListViewItems rein und wieder raus, aber das habe ich noch nie gesehen.
Es gibt ja nur zwei Möglichkeiten
Entweder stammt das childfenster (wenn da eins ist) von Dir (absichtlich oder nicht) oder es ist bestandteil der Implementierung des QListView (was ich nicht glauben mag).
Code: Alles auswählen
Your Files ist ein eigenständiges Label. Keine Auffälligkeiten in UI. Wenn ich das entferne habe ich den selben Effekt.
Such doch mal mit pListView->queryList() nach allen Kinder und Enkelkinder (-Objekten) des ListView und lass dir über pObject->className() mitteilen, wie die alle heissen. Da sollte sich eigentlich was finden lassen.
Und da ich nach wie vor nicht glauben mag, dass dieser Text sozusage zur Grundausrüstung eines QListView gehört (zumindest habe ich noch nie was davon gesehen), wird sich auch irgendwo eine Stelle finden, an der das Objekt mehr oder weniger unabsichtlich eingebettet wird (vielleicht ein ungültiger oder falsch initialisierter Pointer ?) . Hast Du eine Volltextsuche über Dein Projekt gemacht ?
Ansonsten poste doch mal einen Ausschnitt des relevanten Programmcodes
Gruss Arne
PS: für den Fall, dass Du den Dialog im Designer erzeugst:
ich hab's auch schon mal erlebt, dass das *ui File korrupt ist, was man aber nicht immer sofort bemerkt. Allerdings solltest Du dann in der Basisklasse den Fehler finden können. Bau (für diesen Fall) Deinen Dialog doch einfach nochmal vollständig neu auf.