- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 PyQt QTableView
,连接到一个 QAbstractTableModel
,它本身连接到一个管理项目列表的自定义类。我可以在列表末尾插入一个项目,它会适本地通知我的模型,然后调用 beginInsertRows
和 endInsertRows
。我可以验证它是否调用了这两个函数,并且列表已自行更新,但该表从不调用 data
来检索更新的行。
这是怎么回事?我该如何解决?
class FigureTableModel(QAbstractTableModel):
def __init__(self):
QAbstractTableModel.__init__(self)
def changed(index):
start_index = self.createIndex(index, 0)
end_index = self.createIndex(index, COLUMNS - 1)
self.dataChanged.emit(start_index, end_index)
def adding_row(index):
self.beginInsertRows(self.createIndex(0, 0), index, index)
print 'adding ', index
def added_row(index):
self.endInsertRows()
print 'added'
figures.dataChanged.connect(changed)
figures.rowAdding.connect(adding_row)
figures.rowAdded.connect(added_row)
def rowCount(self, parent):
return len(figures)
def columnCount(self, parent):
return COLUMNS
def data(self, index, role):
print 'in data'
if not index.isValid():
return EMPTY
return figures[index.row()].get_table_item(index.column(), role)
最佳答案
有一个问题,我认为这是导致您问题的原因。关于线:
self.beginInsertRows(self.createIndex(0, 0), index, index)
self.createIndex(0, 0)
将创建一个有效的 QModelIndex
。这指的是 beginInsertRows
中的 parent
,所以您基本上是在告诉 View 您将向表的第一行添加一个子项。由于该表没有子项的概念(它不是分层的),因此它不执行任何操作。
对于表,parent
应该是无效的 QModelIndex
,这意味着您的项目位于根目录。所以,你应该使用:
self.beginInsertRows(QtCore.QModelIndex(), index, index)
# or depending on how you import
self.beginInsertRows(QModelIndex(), index, index)
话虽这么说,但有几件事让我觉得很奇怪。
首先,在 index
方法之外,您通常应该避免直接调用 createIndex
。否则很容易把事情搞砸。 index
方法本身应该提供一种一致的方式来创建 QModelIndex
实例。在您的情况下,由于您继承了 QAbstractTableModel
,因此已经实现了 index
方法。
其次,您正在使用全局变量。很多。这通常被认为是不好的做法。如果您的类需要它们,则将它们传递给 __init__
。例如,现在您不能实例化两个独立的模型。因为它们都将使用相同的全局 figure
变量。或者,我不知道 EMPTY
指的是什么,但 data
应该简单地为无效类型返回 None
。不需要另一个名字。类似地,您应该能够从 figures
中获取 COLUMNS
,或者如果您需要一个明确的值,您应该将其传递给 __init__
。
关于python - PyQt QAbstractTableModel 在添加行时从不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109128/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
notificationCenterPublisher = NotificationCenter.default .publisher(for: .NSManagedObjec
我有以下 Rust 代码: #[inline(never)] fn x() -> i32 { 21 } pub fn main() -> i32 { x() } 如果没有优化 (-C
notificationCenterPublisher = NotificationCenter.default .publisher(for: .NSManagedObjec
我有以下 Rust 代码: #[inline(never)] fn x() -> i32 { 21 } pub fn main() -> i32 { x() } 如果没有优化 (-C
假设我的 ASPX 页面没有内联 C# 代码块。 所以,我可以安全地设置 ...在我的 web.config 文件中,不用担心编译错误。 就性能而言,使用以下设置是否会有任何损失? 即“自动”检测
应用程序.js var win1 = Titanium.UI.createWindow({ title:'Tab 1', backgroundColor: 'black', l
基本上,我正在为实现多级优先级队列的 xv6 内核实现一个调度程序。我有一个严重的问题,我不明白,我类(class)的助教不明白,我已经错过了这个项目的最后期限,所以现在帮助我不会给我任何加分 - 但
我想避免 git 自动 merge 我的 composer.json。这样我就可以在 develop 分支中有一个使用 dev-develop 包的 composer.json,而 master 中的
当比较两种不同的算法实现时(因此,不关心它们的绝对性能,而只关心相对性能)我是否最好强制 Java 只运行解释代码? 也就是说,打开 -Xint 标志会更好吗? 最佳答案 我不认为禁用 JIT 会更好
class A{ const size_t number; public: A(size_t number): number(number) {} void f(){
问题 寻找在以下之间切换的方法: 总是 从不 仅在静默模式下 仅当不处于静默模式时 这些选项在手机上的路径---菜单>>设置>>声音>>振动---找到。 通过手机导航很容易更改(顺便说一句,我的手机是
如何设置电源设置关闭:从不(关闭显示器=从不,让计算机进入休眠状态=从不),通过c#代码 最佳答案 这个问题中给出的链接可以告诉你一个方法。 Programmatically change Windo
我是一名优秀的程序员,十分优秀!