在QStandardItem中重载“<”运算符,但未调用它

2024-10-06 15:18:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有QTableView的UI,它反过来使用QStandardItemModel作为其数据。{mycomparison是为了实现"<"运算符(__lt__(...)函数)。但是,当我在表视图中单击列标题时,排序不会正确进行。我的“填充物”模型非常简单:

self.model.removeRows(0, self.model.rowCount())
for i in range(0, len(self.mainFlatList)):
   self.model.setItem(i, 0, QStandardItem(self.mainFlatList[str(i)]["ID"]))
   self.model.setItem(i, 1, QStandardItem(self.mainFlatList[str(i)]["type"]))
   self.model.setItem(i, 2, QStandardItem(self.mainFlatList[str(i)]["string1"]))
   self.model.setItem(i, 3, QStandardItem(self.mainFlatList[str(i)]["string2"]))
   self.model.setItem(i, 4, QStandardItem(self.mainFlatList[str(i)]["timeva1"]))
   self.model.setItem(i, 5, QStandardItem(self.mainFlatList[str(i)]["timeval2"]))
   currentOPTimePercent = (float(self.mainFlatList[str(i)]["timeval1"])/self.totalTime) * 100
   self.mainFlatList[str(i)]["timePercent"] = currentOPTimePercent
   self.model.setItem(i, 6, MQStandardItem(str(self.mainFlatList[str(i)]["timePercent"])))

其中MQStandardItem就是:

^{pr2}$

你知道为什么会失败吗?我还应该注意到,__lt__(...)函数中的print语句甚至没有被打印出来,这导致我怀疑我是否正确地重写了某些内容。如果有帮助,下面是我如何构建UI:

    self.model = QStandardItemModel(numRows,numColumns)
    self.model.setHorizontalHeaderItem(0, QStandardItem("ID"))
    self.model.setHorizontalHeaderItem(1, QStandardItem("Type"))
    self.model.setHorizontalHeaderItem(2, QStandardItem("string1"))
    self.model.setHorizontalHeaderItem(3, QStandardItem("string2"))
    self.model.setHorizontalHeaderItem(4, QStandardItem("timeval1"))
    self.model.setHorizontalHeaderItem(5, QStandardItem("timeval2"))
    self.model.setHorizontalHeaderItem(6, QStandardItem("timePercent"))

    self.tableView = QTableView()
    self.tableView.setModel(self.model)
    self.tableView.setSortingEnabled(True)
    self.tableView.setSelectionMode(QAbstractItemView.SingleSelection)
    self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
    self.tableView.selectionModel().currentChanged.connect(self.foo)

Tags: 函数ltselfiduimodelstrsetitem