I wont to set an editable column in QTableView, so far I tried to subclass QTableView and reimplementing Qt::ItemFlags flags(const QModelIndex & index) const, subclassing QSqlQueryModel and reimplementing Qt::ItemFlags flags(const QModelIndex & index) const, finally, subclassing QAbstractItemView, but this a compiler error showed up.
Subclassing QTableView
Qt Code:
  1. #include "exqtableview.h"
  2.  
  3. ExQTableView::ExQTableView(QWidget *parent) :
  4. QTableView(parent)
  5. {
  6. }
  7.  
  8. Qt::ItemFlags ExQTableView::flags(const QModelIndex & index) const
  9. {
  10. if (!index.isValid())
  11. return Qt::ItemIsEnabled;
  12. if (index.column() == 2)
  13. return index.parent().flags() & ~Qt::ItemIsEditable;
  14. }
To copy to clipboard, switch view to plain text mode 
Subclassing QSqlQueryModel
Qt Code:
  1. #include "exsqlquerymodel.h"
  2.  
  3. ExSqlQueryModel::ExSqlQueryModel(QObject *parent) :
  4. {
  5. }
  6.  
  7. Qt::ItemFlags ExSqlQueryModel::flags( const QModelIndex &index) const
  8. {
  9. Qt::ItemFlags flags = QSqlQueryModel::flags(index);
  10. if (index.column() == 2 )
  11. flags &= ~Qt::ItemIsEditable;
  12. return flags;
  13. }
To copy to clipboard, switch view to plain text mode 
Subclassing QAbstractItemView
Qt Code:
  1. #include "exitemdelegate.h"
  2. #include <QTableWidgetItem>
  3.  
  4. ExItemDelegate::ExItemDelegate(QObject *parent) :
  5. QItemDelegate(parent)
  6. {
  7. }
  8.  
  9. QWidget *ExItemDelegate::createEditor(QWidget *parent,
  10. const QModelIndex & index ) const
  11. {
  12. return item;
  13. }
  14.  
  15. void ExItemDelegate::setEditorData(QWidget *editor,
  16. const QModelIndex &index) const
  17. {
  18. float value = index.model()->data(index, Qt::EditRole).toFloat();
  19.  
  20. QTableWidgetItem *cell = static_cast<QTableWidgetItem*>(editor);
  21. cell->setData(0, value);
  22. }
  23.  
  24. void ExItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
  25. const QModelIndex &index) const
  26. {
  27. QTableWidgetItem *cell = static_cast<QTableWidgetItem*>(editor);
  28. float value = cell->data(Qt::DisplayRole);
  29. model->setData(index, value, Qt::EditRole);
  30. }
  31.  
  32. void ExItemDelegate::updateEditorGeometry(QWidget *editor,
  33. const QStyleOptionViewItem &option, const QModelIndex &) const
  34. {
  35. editor->setGeometry(option.rect);
  36. }
To copy to clipboard, switch view to plain text mode 
So, what wrong I am doing here?