【发布时间】:2015-01-21 12:11:03
【问题描述】:
我试图在我的 Qt 应用程序中使用简单的拖放功能。这是我的代码:
MyWindow::MyWindow(QWidget *parent)
{
..........
setAcceptDrops(true);
}
void MyWindow::dragEnterEvent(QDragEnterEvent *e)
{
if (e->mimeData()->hasUrls()) {
e->acceptProposedAction();
}
}
void MyWindow::dropEvent(QDropEvent *e)
{
foreach (const QUrl &url, e->mimeData()->urls()) {
const QString &fileName = url.toLocalFile();
qDebug() << "Dropped file:" << fileName;
}
}
如您所见,它只是打印放入控制台的文件 bing 的路径名。因此,当我将一个文件从我的桌面拖放到小部件中时,我希望控制台中有类似 /Users/<myName>/Desktop/<filename> 的内容。但我看到类似 file:///.file/id=6571367.2773272/ 的内容正在打印。当我尝试以某种方式使用它时,例如在我的内置编辑器中打开文件(文本),该编辑器对除 Os X Yosemite 之外的所有操作系统都运行良好,应用程序崩溃。
这是一个已知的错误,已发布here,带有补丁here。但我不知道如何使用补丁来使我的代码工作。似乎有一个围绕 Qt 的 Objective C 包装器的解决方案,但是,我不知道如何在 Qt 和 Objective C 中准确地混合 C++。
知道如何使用补丁,或者以其他方式使其工作吗?不知何故,我需要检索被删除文件的实际完整路径。
环境 - Os X Yosemite、Qt Creator 3.1.1 和 Qt 5.2.1。
我还需要在 Windows 上运行相同的应用程序(我们正在为 Windows 和 Mac 使用 Qt 开发),因此寻找跨平台解决方案。
【问题讨论】:
标签: c++ qt drag-and-drop osx-yosemite