2016-04-27 70 views
0

我有一個QTableWidget填充QTableWidgetItems,我想更改單元格範圍(行n ... m,所有列)的背景色。遍歷行/列,並通過某種方式更改每個QTableWidgetItem的bg顏色。像PyQt,更改一定範圍的單元格中的QTableWidgetItem背景色

for n in range(startRow, endRow): 
    for c in range(self.tableWidget.columnCount()): 
    self.tableWidget.item(n,c).setBackgroundColor(self.tableBackgroundColor) 

是痛苦的緩慢(英特爾i7上每個項目約4ms,每25 * 40個單元4秒)。

有沒有更高效的方法來實現這一目標?

回答

1

是的,通過切換到模型/視圖方法。也就是說,使用QTableViewQTableModel而不是QTableWidget。這種方法更快,因爲背景顏色只會針對(幾百個)可見單元格計算,而不是針對所有千個單元格。

使用模型/視圖方法需要一些投資,但對於較大的表格,它肯定是值得的。

這些概念在the Qt docs中解釋。還有一個tutorial。他們都有C++代碼片段,但它並不難以翻譯成PyQt(實際上,請參閱下面的評論)。

+1

第二個想法是,翻譯C++代碼片段可能包含一些微妙之處。我建議使用PyQt源代碼中的例子。下載[PyQt 4](https://www.riverbankcomputing.com/software/pyqt/download)或[PyQt 5](https://www.riverbankcomputing.com/software/pyqt/download5)的源代碼分發和看看項目視圖的例子,例如'itemviews/spinboxdelegate.py' – titusjan

相關問題