2010-08-08 6 views
27

Non sono sicuro di come chiedere questo, quindi, non esitate a chiedere ulteriori informazioni.Come assicurarsi che le colonne in QTableView vengano ridimensionate al massimo

Sembra che tableView->resizeColumnsToContents() ridimensioni solo tutte le colonne in base ai dati nella vista corrente. Il che significa che se ho più dati qui sotto (che è più lungo in termini di conteggi di parole), queste parole verranno eliminate (se la proprietà wordWrap è impostata su true).

La cosa strana è che se si scorre verso il basso e si aggiornano i dati, tableView ridimensionerà correttamente tali colonne. Sembra che tableView non sapesse che ci sono testi più lunghi qui sotto.

Quindi, la mia domanda è, come posso essere sicuro che quelle colonne siano ridimensionate al massimo sulla base di tutti i dati?

miei codici

QSqlTableModel *model = new QSqlTableModel; 
model->setTable("item"); 
model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
model->select();  
tableResult->setModel(model);  
tableResult->setEditTriggers(QAbstractItemView::NoEditTriggers);  
tableResult->setSelectionBehavior(QAbstractItemView::SelectRows); 
tableResult->setSelectionMode(QAbstractItemView::SingleSelection);  
tableResult->resizeColumnsToContents(); 
tableResult->resizeRowsToContents(); 

Update 1

ho provato tableResult->scrollToBottom() e sarà solo ridimensionare in base ai punti nella parte inferiore. Quindi, se ci sono parole più lunghe nel mezzo, queste parole saranno avvolte.

Update 2

Se qualcuno volesse capire di cosa sto parlando, basta download questo esempio. Vedrai che facendo clic sul pulsante PushButton verranno generati dati non ridimensionati correttamente.

Update 3

Possibilmente un errore: https://bugreports.qt.io/browse/QTBUG-9352

+0

Anche io sto avendo questo problema. solo le righe che sono state ridimensionate. Hai mai trovato una soluzione per questo? – ComputerEngineer88

risposta

38

sono riuscito a trovare una soluzione per questo problema, è solo bisogno di nascondere la tabella prima di chiamare resizeColumnsToContents().

Ad esempio:

tableResult->setVisible(false); 
tableResult->resizeColumnsToContents(); 
tableResult->setVisible(true); 
+1

+1 Beautifül!Non avrei mai pensato a questo ... –

+1

Stranamente, 'table.resizeColumnsToContents()' funziona senza nascondere/mostrare la tabella con PyQt5 – zdimension

+2

In Qt 5.6 anche 'table.resizeColumnsToContents()' funziona senza nascondere/mostrare la tabella – Indraraj

5

Credo che sia perché QSqlTableModel carica i dati su richiesta e la vista calcola la larghezza delle colonne basati solo su dati che è disponibile. Se non è necessario le colonne per essere user-ridimensionabile, si può provare questo:

tableResult->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents); 
+0

Non funziona. La colonna non sta ancora ridimensionando correttamente. Ho messo il codice alla fine della funzione. Ho anche provato QList come origine dei dati con QStandardItemModel come modello. – amree

4

ho usato lo stesso soluzione come descritto da amree, che funzionava ottimo per la larghezza delle colonne, ma tableView->resizeRowsToContents() non funzionava correttamente se le colonne offscreen avevano cellule multilinea che dovrebbero avere ha causato l'aumento dell'altezza di una fila.

Ho esaminato la sorgente Qt e sembra che alcuni dei calcoli dipendano dalla geometria del viewport. Sembra che tutto funzioni correttamente per entrambe le colonne e le righe:

#include <limits> 

tableView->setVisible(false); 
QRect vporig = tableView->viewport()->geometry(); 
QRect vpnew = vporig; 
vpnew.setWidth(std::numeric_limits<int>::max()); 
tableView->viewport()->setGeometry(vpnew); 
tableView->resizeColumnsToContents(); 
tableView->resizeRowsToContents(); 
tableView->viewport()->setGeometry(vporig); 
tableView.setVisible(true); 
+2

La risposta di amree mi ha aiutato, ma mi sono imbattuto in un problema con l'auto-ridimensionamento dei vertici contemporaneamente e ho pensato che sarebbe stato utile per i futuri lettori pubblicare la mia soluzione a questo problema strettamente correlato. Un po 'più di "essenzialmente nulla", direi. – dougg3

+0

Eccellente, ho cercato di risolvere quel problema per così tanto tempo! –

Problemi correlati