QTableView - 将第一列设置为"read only"



我有一个基于QStandardItemModel的QTableView。我想将第一列设置为"只读",其他所有列都可编辑。

我不是QT和OOP的专家,我在网上和QT文档中搜索过,我知道我需要重新实现我的模型的flags(constQModelIndex&index)函数,但我不知道如何以及在哪里重新实现。

提前感谢!

您应该创建一个从QStandardItemModel继承的新类,重新实现方法flags,并使用您的新类而不是标准类。

class MyModel : public QStandardItemModel
{
public:
    virtual Qt::ItemFlags flags(const QModelIndex& index) const override
    {
       Qt::ItemFlags result = QStandardItemModel::flags(index);
       if (index.column() == 0) //0 is the first column!
       {
           result &= ~Qt::ItemIsEditable;
       }
       return result;
    }
}

另一种方法:
-创建从QStandardItem继承的新类,
-以相同方式重新实现flags
-使用新类的实例调用QStandardItemModel::setItemPrototype
这种方式稍微复杂一些,因为您还需要重新实现方法QStandardItem::clone

最新更新