2013-07-08 12 views
16

Ecco una schermata di stampa del mio software:Come ottenere un QTableView per riempire il 100% della larghezza?

Come si può vedere, i primi intestazioni QTableVIew non prendono il 100% della larghezza. In effetti, c'è un piccolo spazio bianco verticale sulla destra della "dimensione" del campo.

Come posso ottenere le intestazioni per prendere il 100% della larghezza di QTableView?

+1

possibile duplicato del [QStandardItemModel all'interno Qtableview] (http://stackoverflow.com/questions/16931569/qstandarditemmodel-inside-qtableview) –

risposta

26

Se si utilizza Qt 5, QHeaderView::setResizeMode() non è più disponibile. Invece, è possibile utilizzare QHeaderView::setSectionResizeMode(). Basta chiamare per ogni colonna:

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

Lo stesso problema, continua a non funzionare. L'ultima sezione è allungata ma non la prima. –

+2

Questo funziona per me con Qt 5.1. Avete impostato il modello su tableview prima di impostare le modalità di ridimensionamento della sezione con questo codice? Se non lo hai, non hai ancora nessuna colonna e questo codice non fa nulla. –

+0

Funziona anche per me! grazie –

12

Utilizzare view->horizontalHeader()->setStretchLastSection(true) per espandere l'ultima colonna nello spazio libero.

Inoltre, utilizzare view->horizontalHeader()->setResizeMode(QHeaderView::Stretch) per assegnare alle colonne la stessa larghezza.

+3

@ user2429940 Se stai usando QtCreator/Designer puoi trovarlo nella sezione proprietà – Huy

+0

Il primo comando funziona, ma il secondo no. Ciò significa che ora le ultime colonne sono allungate ma le due colonne non hanno le stesse dimensioni. –

10

Qui funziona utilizzando solo con:

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

sto usando Qt 5.2!

0

Ho avuto difficoltà a distribuire le larghezze delle colonne tra tutte le celle di una tabella. Nel mio caso, in funzione headerData del modello, ho fatto la seguente (è necessario chiamare resizeColumnsToContents() da qualche parte):

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. 
    } 
} 
Problemi correlati