我有一个树视图,某些字段需要使用自定义委托进行编辑。代表为值选择提供QListView
。看起来应该使用QAbstractItemView.edit()
方法从测试中启动编辑,但我无法弄清楚如何访问创建的编辑器(QListView
),这样我就可以选择合适的元素为了测试。
这是我在切换到QComboBox
之前与QListVew
代表合作的测试的一部分,但它似乎太手动了。
for index, enumerator in enumerate(group.children):
editor = delegate.createEditor(
parent=viewport,
option=None,
index=target_index,
)
editor.setCurrentIndex(index)
delegate.setModelData(editor, model, target_index)
assert enumerator.uuid == item.enumeration_uuid
答案 0 :(得分:0)
这是我想出的。
for row, enumerator in enumerate(group.children):
assert view.edit(
target_index,
PyQt5.QtWidgets.QAbstractItemView.AllEditTriggers,
None,
)
editor, = view.findChildren(PyQt5.QtWidgets.QListView)
index = editor.model().index(row, 0, editor.rootIndex())
editor.setCurrentIndex(index)
editor.clicked.emit(index)
# this is fun. if you get weird issues try doing this more times
for _ in range(3):
application.processEvents()
assert enumerator.uuid == item.enumeration_uuid
请注意,我连接编辑器的点击信号以发布回车键事件,因为视图已被硬编码以捕获输入事件并完成编辑。