我試圖在我的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