如何在Qt中制作部分可编辑的树模型

How to make a partially editable tree model in Qt

我想更改qt提供的可编辑树视图示例,使第一列不可编辑,而下一列可编辑。

这是回购协议: https://github.com/pyqt/examples/tree/master/itemviews/editabletreemodel

我知道这与旗帜有关。在 editabletreemodel.py 他们有 class TreeModel.

    def flags(self, index):

        
        if not index.isValid():
            return 0

        return Qt.ItemIsEditable | super(TreeModel, self).flags(index)

我可以将 Qt.ItemIsEditable 更改为 Qt.ItemIsSelectable,这将使所有字段都不可编辑。但这不是我想要的

基本上我想让 Title 列可选择并且 Description 列可编辑,我怎样才能得到这种行为?

只需检查 flags() 实现中的索引列,然后使用独占二元运算符删除 ItemIsEditable 标志:

def flags(self, index):
    flags = super(TreeModel, self).flags(index)
    if index.column() == 0:
        flags &= ~Qt.ItemIsEditable
    return flags

这是假设您使用的是始终提供可编辑项目的超级 class,否则只需添加标志(默认 QAbstractItemModel returns 仅可选择和启用的项目):

def flags(self, index):
    flags = super(TreeModel, self).flags(index)
    if index.column() > 0:
        flags |= Qt.ItemIsEditable
    return flags