• 5054阅读
  • 2回复

怎么override一个继承的类中原来的函数 [复制链接]

上一主题 下一主题
离线succulent
 
只看楼主 倒序阅读 楼主  发表于: 2008-12-08
— 本帖被 XChinux 执行加亮操作(2008-12-08) —
继承了一个类 QSqlRelationalTableModel
想override它的几个函数,包括flags data setdata
但不知道该按照什么样的格式来操作才能编译通过
在h文件里把这几个函数重新再定义
然后在cpp文件里写一遍
这样编译不过啊
请问怎么办呢
离线XChinux

只看该作者 1楼 发表于: 2008-12-08
帖一下你的源代码
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线succulent
只看该作者 2楼 发表于: 2008-12-09
//.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里直接重新实现了
实现的代码既有新的,也包含原来的一些代码
想了解一下,用这种方式可以吗
快速回复
限100 字节
 
上一个 下一个