在QT中為了通過(guò)表格展示數(shù)據(jù)時(shí),通常采用QTableView組件來(lái)展示。
常用的表格儲(chǔ)存方式就是通過(guò)QStandardItemModel來(lái)進(jìn)行存儲(chǔ)
代碼示例如下:
self.model=QStandardItemModel()
self.tableView.setModel(self.model)
...
self.model.setItem(0,0,QStandardItem(item.text()))#通過(guò)改變model中的值來(lái)改變QTableWidget中展示的表格
而如果要對(duì)表格的某列按照降序(或升序)排列時(shí),代碼如下:
self.tableView.sortByColumn(0,Qt.DescendingOrder)
或
self.model.sort(0,Qt.DescendingOrder) #升序Qt.AscendingOrder
即無(wú)論對(duì)model還是對(duì)tableview進(jìn)行排序均能得到效果。
但是對(duì)數(shù)值進(jìn)行排序是則會(huì)產(chǎn)生問(wèn)題,例如:
某列數(shù)值{1,2,3...,99}進(jìn)行降序排序,排序結(jié)果則為
{99,98,97......91,90,9,89....,11,10,1}
其根本原因在于setItem函數(shù)輸入的數(shù)據(jù)只能是字符串類(lèi)型,因此在排序時(shí)將會(huì)把數(shù)值當(dāng)做字符串進(jìn)行排序
如何在輸入函數(shù)值時(shí)保留原始數(shù)據(jù)的屬性從而使得排序正常呢?
可以使用setData函數(shù)
item =QStandardItem()
item.setData(number_data,Qt.DisplayRole) #將number_data替換為數(shù)值即可
self.model.setItem(0,0,item)