2013-07-08 14 views
16

Oto print screen z mojego oprogramowania:Jak uzyskać QTableView, aby wypełnić 100% szerokości?

Jak widać, pierwsze nagłówki QTableVIew nie biorą 100% szerokości. W rzeczywistości jest mała pionowa biała przestrzeń po prawej stronie pola "rozmiar".

Jak mogę uzyskać, aby nagłówki zajmowały 100% szerokości QTableView?

+1

możliwy duplikat [QStandardItemModel wewnątrz Qtableview] (http://stackoverflow.com/questions/16931569/qstandarditemmodel-inside-qtableview) –

Odpowiedz

26

Jeśli używasz Qt 5, QHeaderView::setResizeMode() nie jest już dostępny. Zamiast tego możesz użyć QHeaderView::setSectionResizeMode(). Wystarczy zadzwonić to dla każdej kolumny:

for (int c = 0; c < ui->tableView->horizontalHeader()->count(); ++c) 
{ 
    ui->tableView->horizontalHeader()->setSectionResizeMode(
     c, QHeaderView::Stretch); 
} 
+1

Ten sam problem nadal nie działa. Ostatnia sekcja jest rozciągnięta, ale nie pierwsza. –

+2

To działa dla mnie z Qt 5.1. Czy ustawiłeś model na tableview przed ustawieniem trybów zmiany rozmiaru sekcji za pomocą tego kodu? Jeśli nie, nie masz jeszcze żadnych kolumn, a ten kod nic nie robi. –

+0

Działa również dla mnie! dzięki –

12

Użyj view->horizontalHeader()->setStretchLastSection(true), aby ostatnia kolumna została rozwinięta w wolne miejsce. Ponadto należy użyć , aby kolumny miały taką samą szerokość.

+3

@ user2429940 Jeśli używasz QtCreator/Designer możesz znaleźć to w sekcji właściwości – Huy

+0

Pierwsze polecenie działa, ale drugie nie. Oznacza to, że teraz ostatnie kolumny są rozciągnięte, ale dwie kolumny nie mają tego samego rozmiaru. –

10

Tutaj działa tylko z użyciem:

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); 

używam Qt 5.2!

0

Trudno mi było rozdzielać szerokości kolumn między wszystkie komórki tabeli. W moim przypadku, w zależności headerData modelu, zrobiłem następujące (wymaga wzywającą resizeColumnsToContents() gdzieś):

QVariant headerData(int section, Qt::Orientation orientation, int role) const override { 
    if (orientation == Qt::Vertical) { 
    return QVariant(); 
    } 
    if (role == Qt::SizeHintRole) { 
    auto* p = qobject_cast<QTableView*>(QObject::parent()); 
    if (p == nullptr) return QVariant(); 
    // Parent total width. 
    const int w = p->viewport()->size().width() - 
     p->verticalScrollBar()->sizeHint().width(); 
    QSize qs; 
    // Default height. 
    qs.setHeight(p->verticalHeader()->defaultSectionSize()); 
    // Width per column. 
    switch (section) { 
     case 0: 
     qs.setWidth(w * 0.45); 
     return QVariant(qs); 
     case 1: 
     qs.setWidth(w * 0.45); 
     return QVariant(qs); 
     // ... others 
     default: ; 
    } 
    return QVariant(); 
    } 
    if (role == Qt::DisplayRole) { 
    // header titles. 
    } 
} 
Powiązane problemy