Ich habe einige (4-5) TableViews, jeweils mit wenigen Datenzeilen (variabel, min 2 Zeilen, max 6-7 Zeilen / TableView).
Die TableViews stehen untereinander in einem QVBoxLayout.
Die TableViews haben alle dieselbe feste Breite (definiert über Stylesheet).
Das Problem:
Ich bekomme nicht hin, daß die Höhe der einzelnen TableView sich mit deren Inhalt ändert. Sachverhalt ist derzeit, daß alle TableViews dieselbe feste Höhe aufweisen, unabhängig davon, wieviel Datenzeilen sie enthält. Der jeweilige durch Zeilen nicht belegte Platz ist leer und so verschwende ich z.Zt. eine Menge Platz auf der Screen.
Wenn ich diesen freien Platz dann mit Zeilen befülle, dann erscheint irgendwann mal der Scrollbalken, anstatt daß die betreffende Tableview größer wird.
Mir gehen so langsam die Ideen aus, was ich da noch ausprobieren könnte.
Hat jemand einen Tip?
QTableView & Widget Size
a), c) : okupsala hat geschrieben: a) ScrollBar-Policy ändern,
b) bei Datenänderung Zellengrößen neu berechnen,
c) Widgetgröße neu setzen
b): genau da hakt es bei mir. Ich brauche irgendeinen Weg, über den ich feststellen kann, welche Size das Delegate errechnet, um eine Zelle zu zeichnen.
Ich habe keinen SizeHint für das Item gesetzt, weil ich die Size über das Stylesheet (hinterlegt in einer Datenbank) als Datum definieren will und habe. Damit liefert QStandardItem::sizeHint() eine invalid QSize.
Bleibt: Das Delegate selbst zu fragen, welches Size es für meine Zelle errechnet.
Dazu gibt es die Methode QStyledItemDelegate::sizeHint, die als Parameter eine StyleoptionItemView und einen ModelIndex braucht.
Der Modelindex selbst ist kein Problem, wohl aber der Parameter StyleoptionItemView.
Die Methode: QStyledItemDelegate::initStyleOption ist leider protected.
Ich wüßte derzeit keinen anderen Weg, wie ich an die aktuell verwendete Styleoption rankäme, damit ich damit dann die Methode QStyledItemDelegate::sizeHint verwenden kann.
Als Idee habe ich noch: Irgendwo bin ich beim Stöbern in der Doku über den Begriff gestolpert "HeightforWidth", was wahrscheinlich die Ursache für das (von mir derzeit) unerwünschte Verhalten QTableView ist. Kann man das abstellen?
Code: Alles auswählen
void QTableView::resizeColumnsToContents()
void QTableView::resizeRowsToContents()
int QTableView::columnWidth (int column) const
int QTableView::rowHeight (int row) const
...stimmt, das geht auch. Danke, keine Platzverschwendung mehr.upsala hat geschrieben:Code: Alles auswählen
void QTableView::resizeColumnsToContents() void QTableView::resizeRowsToContents() int QTableView::columnWidth (int column) const int QTableView::rowHeight (int row) const