gpt4 book ai didi

python - 为什么我的 QStandardItemModel itemFromIndex 方法返回 None? (索引无效)

转载 作者:行者123 更新时间:2023-12-01 03:42:49 25 4
gpt4 key购买 nike

我正在尝试创建一个带有复选框的 ListView ,当按下输入/返回键时,该复选框会选中所选的框。我通过覆盖主窗口的事件过滤器来完成此操作(是的,我应该对其进行子类化,但我无法使其工作)

在事件过滤器中,即使我刚刚通过 .isValid() 传递索引,我也会从 itemFromIndex 方法返回一个 None 值没有什么问题。显然我错过了一些东西,但我无法弄清楚 - 它是否在寻找完全不同的索引?模型没更新吗?

欢迎任何有关替代方法的建议

这是我用项目填充模型(QStandardItemModel)的方法,它仅在我加载文件时调用。

    def update_siNLV(self,names,model):

model.clear()

for name in names:
item = Qg.QStandardItem(name)
item.setCheckState(Qc.Qt.Unchecked)
item.setCheckable(True)
model.appendRow(item)

这是来自 init 方法,我在该方法中为选择模型创建一个变量,并在我的 QListView 上安装事件过滤器

    self.sigInSelection = self.siNLV.selectionModel()
self.siNLV.installEventFilter(self)

eventFilter 方法如下所示,并且该方法的过滤部分有效(我已使其按 Enter 键打印选定的索引)

    def eventFilter(self,receiver,event):
if event.type() == QtCore.QEvent.KeyPress:
if event.key() == QtCore.Qt.Key_Return or event.key() == Qc.Qt.Key_Enter:

indexes = self.sigInSelection.selectedIndexes()

for index in indexes:
if index.isValid():
print(str(index.row())+" "+str(index.column()))
item = self.sigInModel.itemFromIndex(index)
item.setCheckState(qtCore.Qt.Checked)
return True

return super(form,self).eventFilter(receiver,event)

最佳答案

正如评论中所讨论的:

QItemSelectionModel.selectedIndexes() 返回的索引来自 View 并与 View 及其直接模型之间的连接相关。该型号的身份可以通过调用 QModelIndex.model() 找到在这种情况下,它不是您想要的模型:它是介于您想要的 QStandardItemModel 之间的代理模型和 View 。

要获得您想要的模型,您需要使用 QAbstractProxyModel.mapToSource() 。所以你可以使用类似这样的代码:

source_index = self.proxy.mapToSource(index)
item = self.sigInModel.itemFromIndex(source_index)

更一般地,您可以遍历任意代理结构,并通过如下代码避免对单个已知代理的硬编码使用:

proxy_model = index.model()
while proxy_model != self.sigInModel:
index = proxy_model.mapToSource(index)
proxy_model = index.model()
item = self.sigInModel.itemFromIndex(index)

但是,在您知道有一个简单的单一代理的情况下,这可能有点过分了。

关于python - 为什么我的 QStandardItemModel itemFromIndex 方法返回 None? (索引无效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39294136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com