2014-01-13 58 views
0

在我的程序中,我有一個按鈕用於在相對目錄中打開文本文件。我正在使用這樣的QDesktopServices:使用默認程序打開txt文件

QDesktopServices::openUrl(QUrl::fromLocalFile("file:///stuff/block_settings.txt")); 

當按鈕被按下時,什麼也沒有發生。

該文件位於名爲「stuff」的文件夾中,該文件夾位於與我的.exe相同的位置。這是用於我所有其他任務的相同目錄。

我在做什麼錯?

謝謝。

+0

有沒有請求失敗狀態的方式爲'QDesktopServices ::的OpenURL()'?調試的第一條規則是讀取並讀取錯誤消息。 – DavidO

+0

我得到了ShellExecute'/stuff/block_settings.txt'失敗(錯誤2)false – mrg95

+0

'QUrl :: fromLocalFile(「file:///stuff/block_settings.txt」)' - 這是prepending file://兩次。 'QUrl(「file:///stuff/block_settings.txt」)'或'QUrl :: fromLocalFile(「/ stuff/block_settings.txt」)' –

回答

-2

我修正了這個問題。變更爲:

QDesktopServices::openUrl(QUrl("file:stuff\\block_settings.txt")); 

不知道如何工作的,因爲我沒有看到任何教程,配置任何地方,但瓦特/電子

+0

我不明白這個答案,請你提供一個片段,文件:foo \ bar.txt「使它工作? – lpapp

+0

編輯我的答案。 – mrg95

+0

我仍然沒有看到任何文檔參考或至少代碼等我不確定你從哪裏得到這些信息。 – lpapp

1

該文件的文件夾中名爲駐留在「東西」與我的.exe相同的位置。這是用於我所有其他任務的相同目錄。我究竟做錯了什麼?

似乎你的完整路徑是過度複雜。我會建議使用此這一翻譯:

QString QCoreApplication::applicationDirPath() [static]

返回包含應用程序可執行文件的目錄。例如,如果您已經在C:\ Qt目錄中安裝了Qt,並且運行了正則表達式示例,則此函數將返回「C:/ Qt/examples/tools/regexp」。

在Mac OS X上,這將指向實際包含可執行文件的目錄,該目錄可能位於應用程序包(如果應用程序已捆綁)中。

警告:在Linux上,此功能將嘗試從/ proc文件系統獲取路徑。如果失敗,它假定argv [0]包含可執行文件的絕對文件名。該函數還假定當前目錄尚未被應用程序改變。

所以,你會寫這樣的代碼:

QDesktopServices::openUrl(QString("%1/stuff/block_settings.txt") 
          .arg(QCoreApplication::applicationDirPath())); 
相關問題