我的做法是实现一个委托(delegate),然后把它设给你要只读的列或行
cpp
class ReadOnlyDelegate: public QItemDelegate
{
public:
ReadOnlyDelegate(QWidget *parent = NULL):QItemDelegate(parent)
{}
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const override //final
{
Q_UNUSED(parent)
Q_UNUSED(option)
Q_UNUSED(index)
return NULL;
}
};
就是不返回任何editor。
然后去设置TableView对象的属性如下:
cpp
ReadOnlyDelegate* readOnlyDelegate = new ReadOnlyDelegate();
ui->tableView->setItemDelegateForColumn(2, readOnlyDelegate); //设置某列只读
ui->tableView->setItemDelegateForRow(0, readOnlyDelegate); //设置某行只读```
如果要将整个TableView设为只读模式,则只需下面一句即可:
cpp
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);