我正在将项目从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;
^
我一定是做错了。
答案 0 :(得分:1)
您需要在您的模型子类中实现(而不是覆盖)此虚函数,即在您实现过时setSupportedDragActions()
函数的同一个类中。只有在您需要拖放视图功能时才需要这样做。