我正在使用 Qt 4.2。
我有一个 QMainWindow,里面有一个 QListView,它使用 QStandardItemModel 来显示我从 .desktop 文件中获得的一些项目。
现在我正在尝试在应用程序上实施放置操作,例如:当 .html 文件放置在 firefox 项目上时,我可以运行 firefox。
所以这就是我所做的:
- 对于列表视图:
viewport()->setAcceptDrops(true);
setAcceptDrops(true);
setDragEnabled(true);
setDropIndicatorShown(true);
setDragDropMode(QListView::DragDrop);
- 对于标准项目模型:
Qt::DropActions supportedDropActions() const {
return Qt::CopyAction | Qt::MoveAction;
}
Qt::ItemFlags flags(const QModelIndex &index) const {
return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled |
Qt::ItemIsDropEnabled | Qt::ItemIsEnabled;
}
QStringList mimeTypes() const {
QStringList types;
types<<"text/uri-list";
return types;
}
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent) {
qDebug() << "dropMimeData";
}
之后,当我将一些文件放到应用程序上时,我再也没有收到 dropMimeData 调试消息。