我有一个基于QStandardItemModel的QTableView。 我想将第一列设置为"只读#34;和所有其他列可编辑。
我不是QT和OOP的专家,我在网上和QT文档中搜索过,我已经明白我需要重新实现标志(const QModelIndex& index)的功能我的模型,但我不知道重新实施的方式和地点。
提前致谢!
答案 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
。