2
我想在QTableView中設置可編輯列,到目前爲止,我想繼承QTableView中和重新實現Qt::ItemFlags flags(const QModelIndex & index) const
,繼承QSqlQueryModel和重新實現Qt::ItemFlags flags(const QModelIndex & index) const
,最後,繼承QAbstractItemView中,但這會使編譯器出現錯誤。設置一個可編輯的列QTableView中
子類QTableView中:
#include "exqtableview.h"
ExQTableView::ExQTableView(QWidget *parent) :
QTableView(parent)
{
}
Qt::ItemFlags ExQTableView::flags(const QModelIndex & index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
if (index.column() == 2)
return index.parent().flags() & ~Qt::ItemIsEditable;
}
子分級QSqlQueryModel
#include "exsqlquerymodel.h"
ExSqlQueryModel::ExSqlQueryModel(QObject *parent) :
QSqlQueryModel(parent)
{
}
Qt::ItemFlags ExSqlQueryModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags = QSqlQueryModel::flags(index);
if (index.column() == 2)
flags &= ~Qt::ItemIsEditable;
return flags;
}
子分級QAbstractItemView中
#include "exitemdelegate.h"
#include <QTableWidgetItem>
ExItemDelegate::ExItemDelegate(QObject *parent) :
QItemDelegate(parent)
{
}
QWidget *ExItemDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem & ,
const QModelIndex & index) const
{
QTableWidgetItem *item = new QTableWidgetItem;
return item;
}
void ExItemDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
float value = index.model()->data(index, Qt::EditRole).toFloat();
QTableWidgetItem *cell = static_cast<QTableWidgetItem*>(editor);
cell->setData(0, value);
}
void ExItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QTableWidgetItem *cell = static_cast<QTableWidgetItem*>(editor);
float value = cell->data(Qt::DisplayRole);
model->setData(index, value, Qt::EditRole);
}
void ExItemDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &) const
{
editor->setGeometry(option.rect);
}
爲什麼所有這些方法無法實現我想要什麼?
只是我忘了例子。 – SIFE 2012-03-16 19:58:51