我有一個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