//.h
class MyModel:public QSqlRelationalTableModel
{
Q_OBJECT
public:
MyModel(QObject *parent = 0);
//需要override的几个函数
Qt::ItemFlags flags ( const QModelIndex & index ) const;
QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const = 0;
bool setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole );
}
//.cpp
Qt::ItemFlags MyModel::flags( const QModelIndex& index ) const
{
if ( !index.isValid() )
{
qDebug() << "Item can be dropped here";
return Qt::ItemIsEnabled | Qt::ItemIsDropEnabled;
}
Qt::ItemFlags defaultFlags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
if ( index.column() == 0 )
defaultFlags |= Qt::ItemIsUserCheckable;
StructureModelNode* item = static_cast<StructureModelNode*>(
index.internalPointer() );
if ( item->itemType() == StructureModelNode::Group )
defaultFlags |= Qt::ItemIsDropEnabled;
return defaultFlags;
}
QVariant MyModel::data( const QModelIndex& index, int role ) const
{
if ( !index.isValid() )
return QVariant();
//...<your other code>
if ( index.column() == 0 && role == Qt::CheckStateRole )
{
// Change this to suit your particular model storage backend
StructureModelNode* item = static_cast<StructureModelNode*>(
index.internalPointer() );
return item->checkState();
}
}
bool MyModel::setData( const QModelIndex& index, const QVariant&
value, int role )
{
if ( !index.isValid() )
return false;
//...<your other code>
if ( role == Qt::CheckStateRole )
{
// Store the new checkstate to your backend here
}
}
然后就在cpp里直接重新实现了
实现的代码既有新的,也包含原来的一些代码
想了解一下,用这种方式可以吗