2016-04-28 73 views
1

填充QTableWidget的表後,我打電話:在QTableWidget中刪除行填充?

table->resizeRowsToContents(); 

這使得該行窄,但仍然有每行之間有很多的填充物,你可以在這裏看到:

Table After resizeRowsToContents()

展望我發現我可以設置每行的高度:

table->verticalHeader()->setDefaultSectionSize(16); 

這將刪除paddin g,並且給了我緊張的間距我想:

Table After setDefaultSectionSize(16)

不過,我很擔心在像素使用絕對大小。如果系統字體設置爲很大,則文本可能不適合該行。

有沒有辦法刪除行之間的填充,同時確保文本將總是適合?

回答

0

使用自定義的委託,在一種方式,它會根據所使用的字體返回正確的尺寸實現QAbstractItemDelegate::sizeHint()方法。

要計算正確的高度,您可以使用隨sizeHint()方法選項參數QFontMetrics

int height = option.fontMetrics.height(); 

或者更準確地說

int height = option.fontMetrics.boundingRect(index.data().toString()).height(); 

編輯:如何使用委託:

CMyDelegate* delegate = new CMyDelegate(tableView); 
tableView->setItemDelegate(delegate); 
+0

謝謝,這聽起來像一個很好的解決方案。我是Qt的新手,在QAbstractItemDelegate進來的時候有點困惑。按照你描述的方式繼承QTableWidgetItem並重寫sizeHint()方法會不會更容易? –

+0

我已經更新了一些答案。是的,您也可以在'QTableWidgetItem'子類並重新實現'sizeHint()'方法。 – Tomas