QTreeWidget-Spalten an Gesamtinhalt anpassen (Qt4)

Alles rund um die Programmierung mit Qt
Antworten
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

QTreeWidget-Spalten an Gesamtinhalt anpassen (Qt4)

Beitrag 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.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Geht auch zu QTreeView http://www.qtforum.de/forum/viewtopic.php?t=2149 einfach die kolonnen breite...
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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!
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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...
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

hast es doch nicht gelesen ... nochmals ... http://www.qtforum.de/forum/viewtopic.php?t=2149 columbreite....
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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)
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Mit header() -> setResizeMode( Qt::Custom ) werden die größen immer passend zu dem Content ausgerichtet.
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag 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!!
Antworten