我有一个基于 QStandardItemModel 的 QTableView。 我想将第一列设置为“只读”,将所有其他列设置为可编辑。
我不是 QT 和 OOP 的专家,我在网上和 QT 文档中进行了搜索,我知道我需要重新实现我的模型的标志(const QModelIndex &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
。
关于QTableView - 将第一列设置为 "read only",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26603868/