- 拖拽打开主要是通过重载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);