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

标签 qt qtableview

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

相关文章:

c++ - QStandardItemModel:添加行的任何有效方法?

c++ - Qt5 QT_TRANSLATE_NOOP 不适用于 tr()

c++ - 如何根据QSignalMapper得到QList的index

qt - 更改多列过滤的 QSortFilterProxyModel 行为

python - 如何自动拉伸(stretch) QTableView 列并保持它们可调整

c++ - 刷新用作 QTableView 编辑器的 QComboBox 中的选项

QT5 标题栏遮盖了 Windows 10 上的顶行按钮

python - PySide2 QListView QTableView 同步问题

qt - Qt模型/ View 和QTableView的基本概念

python - 当模型是 pandas dataframe 时使 QTableView 可编辑