QTableView - 将第一列设置为“只读”

时间:2014-10-28 08:36:58

标签: qt qtableview

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

我不是QT和OOP的专家,我在网上和QT文档中搜索过,我已经明白我需要重新实现标志(const QModelIndex& index)的功能我的模型,但我不知道重新实施的方式和地点。

提前致谢!

1 个答案:

答案 0 :(得分:5)

您应该创建一个继承自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