我有一个基于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
。