对相关区域做拖拽打开文件的功能

  • 拖拽打开主要是通过重载dragEnterEvent和dropEvent两个虚函数实现的。
protected:
    virtual void dragEnterEvent(QDragEnterEvent *event) override;
    virtual void dropEvent(QDropEvent *event) override;
  • 下面是具体的实现细节:
void DicomView::dragEnterEvent(QDragEnterEvent *event)
{
    if (event->mimeData()->hasFormat("text/uri-list"))
        event->acceptProposedAction();
    else
        event->ignore();

}

void DicomView::dropEvent(QDropEvent *event)
{
    QList<QUrl> urls = event->mimeData()->urls();

    if(urls.isEmpty())
        return;

    QList<QUrl>::iterator iter;
    for (auto iter = urls.begin(); iter != urls.end(); ++iter) {
        QString fileName = (*iter).toLocalFile();

        if (fileName.isEmpty()) {
            return;
        }

        if (ReadDicomFile(fileName)) {
            //setWindowTitle(tr("%1 - %2").arg(fileName, tr("Drag File")));
        }
    }
}
  • 其中的hasFormat()中的"text/uri-list"只是打开文件,并不是具体的文件格式;
  • 得到想要的文件的路径后,就能做相关读取处理了。
  • 补充:必须在构造函数中开启dropEvent的相关设置:
    setAcceptDrops(true);
posted @ 2020-07-18 21:52  背叛的故里纸鹤  阅读(456)  评论(0)    收藏  举报