2013-08-17 25 views
14

Ich bin neu in QT und ich habe gerade geschafft, eine QTableView mit meinem Modell arbeiten. Es hat 3 Spalten festgelegt. Wenn ich ein Fenster öffne, sieht es in Ordnung aus, aber wenn ich die Größe des Fensters ändere, wird QTableView selbst skaliert, aber die Spaltenbreite bleibt gleich. Gibt es einen eingebauten Weg, um es zum Laufen zu bringen? Ich möchte Spalten die Größe anpassen, um die Kanten von QTableView bei jeder Änderung der Größe des Fensters anzupassen.Spalten automatisch auf die Größe von QTableView

+0

Wollen Sie immer, dass die Spaltenbreiten gleich sind?Wenn nicht, können Sie die Breite der letzten Spalte dehnen, indem Sie table-> horizontalHeader() aufrufen -> setStretchLastSection (true); –

Antwort

17

Es gibt ein Header-Flag, um sicherzustellen, dass die letzte Spalte von QTableView das übergeordnete Element füllt, wenn die Größe geändert wird. Sie können es so einstellen:

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

Jedoch ändert das nicht die anderen Spalten proportional. Wenn Sie das auch tun wollen, können Sie es innerhalb der resizeEvent Ihrer Eltern behandeln thusly:

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); 
} 

QParent Klasse Unterklasse von QMainWindow ist.

+0

Ich habe den zweiten Teil nicht getestet, aber der erste funktionierte, obwohl ich entschied, das Fenster nicht mehr zu machen (machte mir mehr Sinn) – khajvah

+0

Um proportionale Spaltenbreiten zu setzen, fand ich es am einfachsten, das resizeEvent wie gezeigt zu überschreiben, aber durch Unterklassen die fragliche QTableView und nicht das QMainWindow. – jtbr

3

Widgets QTableView, QTreeView und deren abgeleiteten Klassen (wie QTableWidget) haben diese zwei nützliche Methoden:

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

Wenn Sie offene Dokumentation für eine Klasse QHeaderView, finden Sie Methoden, die eingerichtet Aussehen und Verhalten Zeilen- oder Spaltenüberschrift für Elementansichten.

  1. void QHeaderView::stretchLastSection(bool stretch)
    Wie Davy Jones erwähnt: Sie können Ihr Problem durch eine dieser Methoden lösen.

    Beispiel:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setStretchLastSection(true); 
    
  2. void QHeaderView::setResizeMode(ResizeMode mode)
    Als Modus Sie QHeaderView :: Stretch oder QHeaderView :: ResizeToContents einstellen.
    Leider hat diese Methode einen Nachteil - nach der Anwendung können Sie die Größe der Spalten (oder Zeilen) nicht manuell (in der GUI) oder programmgesteuert ändern.

    Beispiel:

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

Dieser Code Stretchs gleichermaßen jede Spalte, so dass sie die Breite des Tisches passen.

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

Docs:

+0

Ich will dich jetzt küssen, nur Spaß ;-) .. Ich habe so lange nach dieser Linie gesucht .. danke –

+0

Perfekt ... Dies ist die perfekte Lösung für die TableView Stretching/Skalierung Problem. Wirklich danke a Menge.. – Maxx

Verwandte Themen