我有QTableView
4 行和 4 列,每列代表他们的数据。默认情况下QTableView
是可编辑的。现在我想在我的QTableView
.
我该怎么做?
提前致谢。
我有QTableView
4 行和 4 列,每列代表他们的数据。默认情况下QTableView
是可编辑的。现在我想在我的QTableView
.
我该怎么做?
提前致谢。
类似的事情也可以做到:
class NotEditableDelegate : public QItemDelegate
{
Q_OBJECT
public:
explicit NotEditableDelegate(QObject *parent = 0)
: QItemDelegate(parent)
{}
protected:
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{ return false; }
QWidget* createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const
{ return Q_NULLPTR; }
};
正在使用:
// Make all the columns except the second read only
for(int c = 0; c < view->model()->columnCount(); c++)
{
if(c != 1)
view->setItemDelegateForColumn(c, new NotEditableDelegate(view));
}
您可以使用该setItemDelegateForColumn()
功能。实现一个只读委托,并将其设置为您需要的列。
您还可以在模型中使用标志,并删除Qt::ItemIsEditable
特定列的标志。
最简单的方法是设置您不想以这种方式编辑的项目的标志:
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
您需要覆盖“标志”方法并为所选列指定元素的可编辑性参数
Qt::ItemFlags TableModel::flags(const QModelIndex &index) const
{
if(!index.isValid())
return Qt::NoItemFlags;
if(index.column() == SELECTED_COLUMN_NUM)
{
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
}
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
}
可能已经晚了,但供将来参考。您应该将表格视图设置为NoEditTrigger
:
myTableView->setModel(model);
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers)
在覆盖方法中,只需将其更改为if(!(index.column() == 0)
并将Flag
值更改为Flag |= Qt::ItemisEditable
.
这很好用。