2010-02-01 10 views
7

Il QTableWdiget è favoloso per le semplici visualizzazioni a griglia. Cambiare colori, caratteri, ecc. È semplice.QTableWidget: come posso ottenere linee più strette con meno spaziatura verticale?

Tuttavia, non sono riuscito a conferire alla griglia un aspetto più "stretto" con spazi bianchi meno verticali. Vedo che i colloqui di documentazione Qt (ad esempio here) su

  • margine
  • confine
  • imbottitura

intorno widget, ma quando ho impostato questi ho solo modifiche intorno a tutta la widget di griglia piuttosto che dentro.

Come posso impostare questo (con un foglio di stile o opzioni hardcoded) direttamente per rendere più stretto lo schermo di QTableWidget?

risposta

5

Il codice diventando 'h' potrebbe essere infondata. Era solo un esempio. Copia & incolla il seguente codice piuttosto rudimentale. Cambia il valore in "setDefaultSectionSize()", ricompila ed esegui. Dovresti vedere la differenza. Impostando questo valore su 10 o 50 si ottengono risultati visibili. Nel codice sopra, è possibile che QFontMetrics o QFont stiano scherzando.

È possibile utilizzare qualsiasi cosa si desideri per ottenere l'altezza, ma la dimensione del carattere ha più senso.

#include <QtGui> 

int main(int argc, char* argv[]) 
{ 
QApplication app(argc, argv); 

QDialog* my_dialog = new QDialog(); 
QHBoxLayout* layout = new QHBoxLayout(); 
QTableWidget* my_table_widget = new QTableWidget(my_dialog); 

my_table_widget->setRowCount(10); 
my_table_widget->setColumnCount(10); 
my_table_widget->verticalHeader()->setDefaultSectionSize(15); 
layout->addWidget(my_table_widget); 
my_dialog->setLayout(layout); 
my_dialog->resize(500, 200); 
my_dialog->show(); 

return app.exec(); 
} 

MODIFICA: Non so come formattare un blocco di codice qui ... perdonami. :)

Edit 2: mi fisso che, e la seguente semplice tighterTable.pro di file aiuta lungo.

TEMPLATE = app 
TARGET = 
DEPENDPATH += . 
INCLUDEPATH += . 

SOURCES += tighterTable.cpp # if that is the filename 

Grazie a questo grande gruppo.BTW: L'editing come codice è appena indentato da quattro spazi e/o premendo il pulsante con il piccolo '101010' nella riga di formattazione.

3

QTableWidget è un modello e una vista. In genere, il metodo data() di QAbstractItemModel fornisce un valore SizeHintRole utilizzato per indicare alla vista quale dimensione dovrebbe essere ogni cella.

Dato che si sta utilizzando QTableWidget, non penso ci sia nulla che si possa fare per modificare l'hint di dimensioni restituito dal suo modello interno. Anche lo Qt style sheet documentation non menziona nulla in quell'area.

+0

Ciao Kaleb, apprezzo la risposta - ho avuto più o meno la stessa conclusione ("proprio non ce la faccio") ma è bello avere un secondo paio di occhi sul problema. –

5

Quello che stai cercando ha una soluzione molto stupida IMHO, ma funziona. È necessario impostare i membri defaultSectionSize() delle intestazioni. Accesso tramite verticalHeader() & horizontalHeader(). Non ho mai veramente impostato la larghezza della colonna w/questo b/c la maggior parte dei miei progetti mi coinvolge aggiungendo righe, non colonne, e chiamo solo resizeColumnsToContents o faccio un ridimensionamento manuale. Tuttavia, le righe sono fastidiose. Generalmente ottengo l'altezza del font usando QFontMetrics e aggiungo 2. Ogni riga successiva aggiunta dovrebbe avere questa altezza, e viola: aspetto più stretto.

Spero che questo aiuti.

EDIT:

codice non testato:

QFontMetrics fm(my_font); 
int h = fm.height() + 2; 
my_table->verticalHeader()->setDefaultSectionSize(h); 
+0

Paul, non posso andare al lavoro. Ottengo 'fm' e' h' e posso impostare, ma la tabella non cambia in apparenza. Inoltre, non importa se elimino le righe e ne aggiungo di nuove: hanno tutte quel tocco in più di spaziatura verticale. –

+0

Funziona! L'altezza della riga viene modificata in QTableWidget. – Zmey

0

QTableWidget -> verticalHeader -> setMinimumSectionSize() è il modo giusto e può essere impostato in ui.

Problemi correlati