我有一个QTableView
与4行和4列,每个代表其中的数据。默认情况下,QTableView
是可编辑的。现在我想在我的QTableView
中将任何特定列设置为不可编辑。Qt - 如何使我的QTableView的特定列为非可编辑?
我该怎么办?
在此先感谢。
我有一个QTableView
与4行和4列,每个代表其中的数据。默认情况下,QTableView
是可编辑的。现在我想在我的QTableView
中将任何特定列设置为不可编辑。Qt - 如何使我的QTableView的特定列为非可编辑?
我该怎么办?
在此先感谢。
您可以使用setItemDelegateForColumn()
函数。实现只读委托,并将其设置为您需要的列。
您也可以在模型中使用the flags,并删除特定列的Qt::ItemIsEditable
标志。
在替代方法中,将其更改为if(!(index.column() == 0)
并将Flag
的值更改为Flag |= Qt::ItemisEditable
。
这工作正常。
我想你的意思是重写'bool QAbstractItemView :: edit(const QModelIndex&index,EditTrigger trigger,QEvent * event)'不是吗? 在这种情况下,您只需将'false'返回为只读列。 –
可能会迟到,但以备参考。你应该表视图设置为NoEditTrigger
这样的:
myTableView->setModel(model);
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers)
哇,这是我见过的最干净的解决方案,特别是如果您只希望数据在同一模型的视图中是只读的。谢谢! –
但是,OP如何要求,如何将这种方法应用于单列或单行? –
类似的东西也可以做到这一点:
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));
}
最简单的方法是settting标志您不希望以这种方式进行编辑的项目:
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
如何实现只读委托。任何示例? – oya163