我应该在哪里重新实现QAbstractItemModel :: supportedDragActions()?

时间:2014-04-24 08:01:52

标签: c++ qt method-overriding

我正在将项目从Qt 4.x迁移到5,而下一个功能已经过时了:

model->setSupportedDragActions(Qt::MoveAction);

我已经研究过,显然我必须重新实现函数/覆盖一个名为supportedDragActions()This guy的虚拟函数,它具有与函数相同的问题并解决了它。 我的新手问题是,我应该在哪里重新实现这样的功能?在qabstractitemmodel.h / cpp?或者在另一个班级的某个地方?

原谅我的无知。

三江源。

编辑: 我在我的cpp中实现了函数,正好在调用setSupportedDragActions()的函数之上,如下所示:

mapmodulelist.cpp:
void QAbstractItemModel::setSupportedDragActions(Qt::DropActions actions){
    Q_D(QAbstractItemModel);
    d->supportedDragActions = actions;
}

void MapModuleList::setupModel() {
    if (mapLayersModel == NULL) {
        mapLayersModel = new QStandardItemModel(0);
        mapLayersModel ->setSupportedDragActions(Qt::MoveAction);
    }
}

mapLayersModel是此类的成员,这是它的声明:

static QStandardItemModel* mapLayersModel;

我还必须在qabstractitemmodel.h中添加标题:

void setSupportedDragActions(Qt::DropActions actions);

我收到了下一个错误:

invalid use of incomplete type 'class QAbstractItemModelPrivate'
     d->supportedDragActions = actions;
      ^

forward declaration of 'class QAbstractItemModelPrivate'
 class QAbstractItemModelPrivate;
       ^

我一定是做错了。

1 个答案:

答案 0 :(得分:1)

您需要在您的模型子类中实现(而不是覆盖)此虚函数,即在您实现过时setSupportedDragActions()函数的同一个类中。只有在您需要拖放视图功能时才需要这样做。