Die Größe der Spalten wird automatisch auf die Größe von QTableView angepasst

Lesezeit: 2 Minuten

Benutzer-Avatar
khajwa

Ich bin neu bei Qt und habe es gerade geschafft, eine QTableView mit meinem Modell zum Laufen zu bringen. Es hat feste 3 Spalten. Wenn ich ein Fenster öffne, sieht es in Ordnung aus, aber wenn ich die Größe des Fensters ändere, wird die Größe von QTableView selbst geändert, aber die Breite der Spalten bleibt gleich. Gibt es eine eingebaute Möglichkeit, damit es funktioniert? Ich möchte, dass die Größe der Spalten an die Ränder von QTableView angepasst wird, wenn die Größe des Fensters geändert wird.

  • Sollen die Spaltenbreiten immer gleich sein? Wenn nicht, können Sie die Breite der letzten Spalte strecken, indem Sie table->horizontalHeader()->setStretchLastSection(true) aufrufen;

    – Min Lin

    18. August 2013 um 0:04 Uhr

Benutzer-Avatar
Frosch

Dieser Code dehnt alle Spalten gleichmäßig, sodass sie der Breite der Tabelle entsprechen.

table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

Dokumente:

Benutzer-Avatar
Davy Jones

Es gibt ein Header-Flag, um sicherzustellen, dass die letzte Spalte der QTableView ihre übergeordnete Spalte ausfüllt, wenn die Größe geändert wird. Du kannst es so einstellen:

table_view->horizontalHeader()->setStretchLastSection(true);

Die Größe der anderen Spalten wird dadurch jedoch nicht proportional geändert. Wenn Sie das auch tun möchten, können Sie es innerhalb des resizeEvent Ihres Elternteils folgendermaßen behandeln:

void QParent::resizeEvent(QResizeEvent *event) {
    table_view->setColumnWidth(0, this->width()/3);
    table_view->setColumnWidth(1, this->width()/3);
    table_view->setColumnWidth(2, this->width()/3);

    QMainWindow::resizeEvent(event);
}

Die QParent-Klasse ist eine Unterklasse von QMainWindow.

  • Ich habe den zweiten Teil nicht getestet, aber der erste hat funktioniert, obwohl ich mich entschieden habe, das Fenster nicht veränderbar zu machen (machte für mich mehr Sinn).

    – khajwa

    18. August 2013 um 7:24 Uhr

  • Um proportionale Spaltenbreiten festzulegen, fand ich es am einfachsten, das resizeEvent wie gezeigt zu überschreiben, aber durch Unterklassen der fraglichen QTableView und nicht des QMainWindow.

    – jtbr

    5. Oktober 2017 um 2:08 Uhr

Benutzer-Avatar
iamantonie

Widgets QTableView, QTreeView und ihre abgeleiteten Klassen (z QTableWidget) haben diese zwei nützlichen Methoden:

QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;

Wenn Sie die Dokumentation für eine Klasse öffnen QHeaderView, finden Sie Methoden, die das Erscheinungsbild und Verhalten von Zeilen- oder Spaltenüberschriften für Elementansichten festlegen. Sie können Ihr Problem mit einer der folgenden Methoden lösen:

  1. void QHeaderView::stretchLastSection( bool stretch )

    Wie Davy Jones erwähnt hat.

    Beispiel:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setStretchLastSection(true);
    
  2. void QHeaderView::setResizeMode( ResizeMode-Modus )

    Wie Modus Sie können QHeaderView::Stretch oder QHeaderView::ResizeToContents festlegen.
    Leider hat diese Methode einen Nachteil – nachdem sie angewendet wurde, können Sie die Größe von Spalten (oder Zeilen) nicht manuell (in der GUI) oder programmgesteuert ändern.

    Beispiel:

    QTableView *table = new QTableView();  
    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
    

In PyQt5 können Sie dies in Ihrem table_widget erreichen, indem Sie Folgendes tun:

header = table_widget.horizontalHeader()
header.setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)

1019050cookie-checkDie Größe der Spalten wird automatisch auf die Größe von QTableView angepasst

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy