我试图将树的选择限制为特定列。
我大量使用委托来创建自定义的每项每列行为、编辑器等。我希望我可以通过阻止事件或类似的事情从委托中以某种方式完成此操作。问题是,我认为我必须创建一个完全自定义的解决方案来模仿扩展选择。
然而,经过大量搜索和很少的示例后,听起来我想在我的树视图上有一个自定义的 QItemSelectionModel 。这个假设正确吗?
如何创建一个自定义 QItemSelectionModel ,它将使用扩展选择模式,但允许我忽略或恢复选择(如果不在特定列中)。换句话说,单击另一列不应更改选择(不应选择或取消选择)
一旦我有了选择模型,我就知道如何添加它。我请求帮助实现派生类(除非这可以通过连接的信号来完成)。
我正在使用 Python,但希望得到任何帮助。
谢谢你,
[编辑:]我发现了这些类似的问题:http://lists.qt.nokia.com/pipermail/qt-interest/2010-September/027647.html
"子类 QItemSelectionModel 并重新实现两个选择方法以具有
你想要的行为。只需忽略列 > 0 的范围部分。
...
或者也许只是重新实现 flags() 以使该项目不可选择。我不
知道这是否会产生任何副作用。”
我尝试在 QTreeWidgetItem 上重新实现标志,但从未被调用:
def flags(self, index):
print index.column()
return super(DDOutlinerBaseItem, self).flags(index)
理论上,以下调整应该有效。
上述解决方案可以使用两个单独的方法和 @pyqtSlot 装饰器来消除重载方法名称的歧义:
@pyqtSlot(QModelIndex, QItemSelectionModel.SelectionFlags)
def select(self, index, command):
# ...
@pyqtSlot(QItemSelection, QItemSelectionModel.SelectionFlags)
def select(self, selection, command):
#...
这避免了在方法实现中检查某些类的实例的需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)