我遇到QTableView问题并将数据放入其中。文本(字符串)显示正常,可以使用代理和QStandardItemModel进行排序和过滤
self.material_model = QtGui.QStandardItemModel(self)
self.proxy = QtGui.QSortFilterProxyModel(self)
self.proxy.setSourceModel(self.material_model)
self.t_material.setModel(self.proxy)
但是,如果我尝试将数字/值放入表中,则根本不会显示以下代码段:
for row in xrange(0, len(self.material.data)):
item = QtGui.QStandardItem(str(self.material.data[row]['name']))
self.material_model.setItem(row, 0, item)
item2 = QtGui.QStandardItem()
item2.setData(QtCore.Qt.DisplayRole,float(999.99))
self.material_model.setItem(row, 1, item2)
我尝试了几种变体,包括Qt.DisplayRole而不是Qt.EditRole。但是从其他帖子中我感觉到,并非所有的方法和功能都在pyQt中实现,因此我不愿意过多地玩游戏(我已经投入了几个小时)。现在我希望你能帮我解决这个问题。也许,我的方法不适合我尝试做的事情,这基本上是按文本(名称)和值(间隔)过滤内容。我正在使用pyQt,Windows7,数据源自SQLite数据库,使用自编写的查询包装而不是QtSQL。
非常感谢任何见解!
干杯,
本
答案 0 :(得分:1)
我找到了一个有点优雅的解决方案。如何格式化数字字符串更加小心。在前面添加空格作为0位数的占位符。因此,如果您希望您的数字长度为10个字符串,带有4个小数位:
float_as_str = "{:10.4f}".format(float_i_started_with)
最后,当你对它们进行排序时,一切都会成功。唯一的缺点是:
您必须明确告诉它您的号码的最大长度是多少。在这种情况下,它将对任何数字进行排序< 10 ^ 6(6来自10-4)。
它给它一个右对齐的外观。
答案 1 :(得分:0)
在将数字插入表格之前尝试将数字转换为字符串,它不会影响您的程序,因为它只是用于显示目的。