Qt QListView的QStandardItemModel,外部放置操作不起作用

Qt QListView的QStandardItemModel,外部放置操作不起作用,qt,drag-and-drop,qstandarditemmodel,Qt,Drag And Drop,Qstandarditemmodel,我正在使用Qt4.2 我有一个QMainWindow,里面有一个QListView,它使用一个QStandardItemModel来显示我从.desktop文件中获取的一些项目 现在,我正在尝试在应用程序上实现一个drop操作,以便在firefox项目上放置.html文件时运行firefox 这就是我所做的: -对于listView: viewport()->setAcceptDrops(true); setAcceptDrops(true); setDragEnabled(true

我正在使用Qt4.2

我有一个QMainWindow,里面有一个QListView,它使用一个QStandardItemModel来显示我从.desktop文件中获取的一些项目

现在,我正在尝试在应用程序上实现一个drop操作,以便在firefox项目上放置.html文件时运行firefox

这就是我所做的:

-对于listView:

 viewport()->setAcceptDrops(true);
 setAcceptDrops(true);
 setDragEnabled(true);
 setDropIndicatorShown(true);
 setDragDropMode(QListView::DragDrop);
-对于standardItemModel:

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";
}
Qt::DropActions supportedDropActions()常量{
返回Qt::CopyAction | Qt::MoveAction;
}
Qt::ItemFlags标志(常量QModelIndex&index)常量{
返回Qt::ItemIsSelectable | Qt::ItemIsDragEnabled|
Qt::ItemisProperted | Qt::ItemIsEnabled;
}
QStringList mimeTypes()常量{
QStringList类型;

类型您还需要重新实现
dragEnterEvent()
dropEvent()
-它们是
QListView
中的虚拟函数

从文件中:

下降

要能够接收小部件上丢弃的媒体,请调用 为小部件设置AcceptDrops(true),并重新实现 DragentEvent()和dropEvent()事件处理程序函数

比如说,, 下面的代码在QWidget的构造函数中启用drop事件 子类,从而可以有效地实现drop事件 处理程序:


您还需要重新实现
dragEnterEvent()
dropEvent()
-它们是
QListView
中的虚拟函数

从文件中:

下降

要能够接收小部件上丢弃的媒体,请调用 为小部件设置AcceptDrops(true),并重新实现 DragentEvent()和dropEvent()事件处理程序函数

比如说,, 下面的代码在QWidget的构造函数中启用drop事件 子类,从而可以有效地实现drop事件 处理程序:

 void Window::dragEnterEvent(QDragEnterEvent *event)
 {
     if (event->mimeData()->hasFormat("text/plain"))
         event->acceptProposedAction();
 }


 void Window::dropEvent(QDropEvent *event)
 {
     textBrowser->setPlainText(event->mimeData()->text());
     mimeTypeCombo->clear();
     mimeTypeCombo->addItems(event->mimeData()->formats());

     event->acceptProposedAction();
 }