Seite 1 von 1
QTreeWidget-Spalten an Gesamtinhalt anpassen (Qt4)
Verfasst: 25. Mai 2006 20:10
von FaS
Hallo, habe nur resizeColumnToContents() gefunden, das berücksichtigt allerdings nur aktuell sichtbare Elemente.
Ein manueller Durchlauf der top-level-items würde auch noch gehen da ich das widget als nicht-hierarchische liste benutze, allerdings kenne ich keine funktion um die optimale breite eines QTreeWidgetItem's zu bekommen, sizeHint() liefert nur -1.
Verfasst: 26. Mai 2006 09:49
von patrik08
Geht auch zu QTreeView
http://www.qtforum.de/forum/viewtopic.php?t=2149 einfach die kolonnen breite...
Verfasst: 26. Mai 2006 16:07
von FaS
Sorry, aber versteh nich ganz was du mir damit sagen willst, finde in dem thread jedenfalls keine lösung zu meinem problem.
Ich möchte einfach nur die breite einer QTreeWidget-spalte automatisch an den inhalt anpassen, so wie QTreeView::resizeColumnToContents( int ), nur dass halt alle Zeilen berücksichtigt werden und nicht nur die aktuell sichtbaren.
Hoffe jemand kann mir da helfen, danke!
Verfasst: 26. Mai 2006 16:19
von patrik08
Dann durchlaufe alle zeilen mit dem resizeColumnToContents(int)
nicht nur die erste .... nach dem setzen vom text...
oder die breite herausfinden und die differenz hinzufuegen was bleibt ..
und den miniumu size setzen...
Ich mache so was mit expanding im designer ui file ... als platzhalter die space horizzontal fixed mit dem wert... wen ein element noch leer ist...
Verfasst: 26. Mai 2006 16:45
von FaS
qt-designer? ich will nicht die qtreewidget-größe ändern sondern die einzelnen spaltenbreiten in dem widget. das ist ja kein problem mit QTreeView::header()->resizeSection( int, int ). dazu muss ich aber wissen, wie breit das größte listitem in der jeweiligen spalte ist (abhängig vom text). resizeColumnToContents justiert zwar die spaltenbreite, der bezieht aber nur akutell vom user sichtbare einträge ein.
Verfasst: 26. Mai 2006 21:14
von patrik08
hast es doch nicht gelesen ... nochmals ...
http://www.qtforum.de/forum/viewtopic.php?t=2149 columbreite....
Verfasst: 26. Mai 2006 21:44
von FaS
ich danke dir wirklich für den hinweis nur kann ich da nichts finden um einen int-wert zu bekommen, welcher mir die breite eines listitems verrät wie es sein sollte (nicht wie es ist) damit deren text komplett angezeigt werden kann (genau passen halt)
Verfasst: 27. Mai 2006 11:20
von patrik08
int QTreeView::columnViewportPosition ( int column ) const
Returns the horizontal position of the column in the viewport.
int QTreeView::columnWidth ( int column ) const
Returns the width of the column.
oder?
Verfasst: 27. Mai 2006 12:12
von FlorianBecker
Mit header() -> setResizeMode( Qt::Custom ) werden die größen immer passend zu dem Content ausgerichtet.
Verfasst: 27. Mai 2006 15:48
von FaS
patrik08, ich will nicht die aktuellen größen/positionsinformationen abrufen, sondern eine berechnete breitenangabe, abhängig vom inhalt (text) der einzelnen items.
Die funktion soll so sein wie bei einem doppelklick zwischen 2 spaltenüberschriften in einem windows-listview control, report mode.
FlorianBecker, danke, funktioniert aber nicht immer:
Code: Alles auswählen
<tree widget>->header()->setStretchLastSection( false );
<tree widget>->header()->setResizeMode( QHeaderView::Custom );
Es funktioniert nur, solange vertikal alle einträge "reinpassen".
Sobald das widget mehr zeilen hat als dargestellt werden können, nimmt die spaltenbreite (ausgehend von der optimalen breite), immer weiter ab. Auch wenn die zeilenanzahl gleich bleibt, tritt das phänomen auf wenn das widget vertikal verkleinert wird (und die zeilen neu geschrieben werden). Also je länger die liste außerhalb des sichtbereiches, desto kleiner werden die spalten, sehr merkwürdig.
Außerdem sollen die Spalten weiterhin vom Benutzer verändert werden können (QHeaderView::Interactive ist also vorraussetzung).
Das alles ist kein ungewöhnlicher spezialfall was ich hier fordere, das ist das ganz normale verhalten von windows-listen-steuerelementen.
Bin dankbar für weitere hinweise!!