2013-08-17 14 views
14

Sono nuovo a QT e sono appena riuscito a far funzionare QTableView con il mio modello. Ha riparato 3 colonne. Quando apro una finestra, sembra ok ma quando ridimensiono la finestra, la stessa QTableView viene ridimensionata ma la larghezza delle colonne rimane la stessa. Esiste un modo integrato per farlo funzionare? Voglio ridimensionare le colonne per adattarle ai bordi di QTableView ogni volta che la finestra viene ridimensionata.Le colonne si ridimensionano automaticamente alla dimensione di QTableView

+0

Vuoi sempre che le larghezze delle colonne siano le stesse?In caso contrario, puoi allungare la larghezza dell'ultima colonna chiamando table-> horizontalHeader() -> setStretchLastSection (true); –

risposta

17

C'è un flag di intestazione per assicurare che l'ultima colonna di QTableView riempia il suo genitore se ridimensionata. È possibile impostarlo in questo modo:

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

Tuttavia, ciò non ridimensiona proporzionalmente le altre colonne. Se si vuole fare anche questo, si potrebbe gestire all'interno della resizeEvent di un genitore nel seguente modo:

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

classe QParent è sottoclasse di QMainWindow.

+0

Non ho provato la seconda parte, ma la prima ha funzionato, anche se ho deciso di rendere la finestra non possibile (per me aveva più senso) – khajvah

+0

Per impostare le larghezze delle colonne proporzionali, ho trovato più facile sovrascrivere resizeEvent come mostrato, ma per sottoclasse QTableView in questione, piuttosto che QMainWindow. – jtbr

3

Widget QTableView, QTreeView e le loro classi derivate (come QTableWidget) ha questo due metodi utili:

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

Se la documentazione aperta per una classe QHeaderView, troverete i metodi che si insediano aspetto e il comportamento di intestazione di riga o di colonna per le viste degli articoli. È possibile risolvere il problema con uno dei seguenti metodi:

  1. void QHeaderView::stretchLastSection(bool stretch)
    Come Davy Jones menzionato.

    Esempio:

    QTableView *table = new QTableView(); 
    table->horizontalHeader()->setStretchLastSection(true); 
    
  2. void QHeaderView::setResizeMode(ResizeMode mode)
    Come modalità è possibile impostare QHeaderView :: Stretch o QHeaderView :: ResizeToContents.
    Sfortunatamente questo metodo ha uno svantaggio: una volta applicato, non sarà possibile modificare manualmente le dimensioni delle colonne (o delle righe) (in GUI) o in modo programmatico.

    Esempio:

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

Questo codice stretchs ugualmente ogni colonna in modo che si adattino larghezza della tabella.

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

Documenti:

+0

Voglio baciarti adesso, sto solo scherzando ;-) .. Ho cercato così tanto tempo per questa linea .. grazie –

+0

Perfetto ... Questa è la soluzione perfetta per il problema di allungamento/ridimensionamento di TableView .. Davvero grazie a molto .. – Maxx

Problemi correlati