2012-09-27 60 views

回答

0

在替代方法中,將其更改爲if(!(index.column() == 0)並將Flag的值更改爲Flag |= Qt::ItemisEditable
這工作正常。

+0

我想你的意思是重寫'bool QAbstractItemView :: edit(const QModelIndex&index,EditTrigger trigger,QEvent * event)'不是嗎? 在這種情況下,您只需將'false'返回爲只讀列。 –

1

可能會遲到,但以備參考。你應該表視圖設置爲NoEditTrigger這樣的:

myTableView->setModel(model); 
myTableView->setEditTriggers(QAbstractItemView::NoEditTriggers) 
+0

哇,這是我見過的最乾淨的解決方案,特別是如果您只希望數據在同一模型的視圖中是隻讀的。謝謝! –

+4

但是,OP如何要求,如何將這種方法應用於單列或單行? –

5

類似的東西也可以做到這一點:

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)); 
} 
相關問題