【问题标题】:QStandardItemModel with QListView, external drop action does not work带有 QListView 的 QStandardItemModel,外部放置操作不起作用
【发布时间】:2012-12-12 11:23:32
【问题描述】:

我使用的是 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 调试消息。

【问题讨论】:

    标签: qt drag-and-drop qstandarditemmodel


    【解决方案1】:

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

    来自文档:

    掉落

    为了能够接收放置在小部件上的媒体,请调用 setAcceptDrops(true) 为小部件,并重新实现 dragEnterEvent() 和 dropEvent() 事件处理函数。

    例如, 以下代码在 QWidget 的构造函数中启用拖放事件 子类,可以有效地实现 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();
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-30
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 2013-08-18
      • 2021-07-26
      相关资源
      最近更新 更多