我试图在我的Qt应用程序中使用简单的拖放功能。这是我的代码:Os X优胜美地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之外的所有操作系统,该应用程序崩溃。
这是一个已知的bug,发布为here,补丁here。但我不知道如何使用该补丁来使我的代码工作。似乎有围绕Qt的Objective C包装的解决方案,但是,我不知道如何在Qt和Objective C中混合使用C++。
任何想法如何使用该补丁或使其工作其他方式?不知何故,我需要检索被删除文件的实际完整路径。
环境 - OS X优胜美地,Qt Creator 3.1.1与Qt 5.2.1。
我需要在Windows上运行相同的应用程序(我们正在为Windows和Mac开发Qt),因此寻找跨平台解决方案。
让我们[在聊天中继续讨论](http://chat.stackoverflow.com/rooms/67486/discussion-between-cupidvogel-and-lpapp)。 – SexyBeast 2014-12-22 18:26:18
仅供参考,我建议不要使用-J4。看起来使用-J4时可能会发生一些竞争条件并且无法建立。它更长,但我建议只使用-j1 – Seb 2015-01-12 16:45:40
FYI,这已在Qt 5.4.1中修复。 [QTBUG-40449](https://bugreports.qt.io/browse/QTBUG-40449) – Shinnok 2015-03-17 08:39:48