2016-03-22 75 views
0

関連する外部プログラムでファイルを開くにはどうすればいいですか?Qt:外部プログラムでファイルを開く方法 "open with ..."ダイアログ

プラットフォームに依存しないコードですか?または、すべてのプラットフォームで「open with ...」ダイアログを呼び出すには、

#ifdef 
#else 
#endif 

構造を実装する必要がありますか?事前に

おかげ

EDIT:更新は、再探索の数時間後、私はWindowsのための良い解決策を見つけました。

我々は、それがファイルの関連付けエラーで失敗した場合、我々はのShell32.dllダイアログ

QString file_path = "C:\VeryGoodPath.txt"; 
int iResult = (int)ShellExecuteA(0, 0, file_path.toStdString().c_str(), 0, 0 , SW_SHOW); 
if(iResult>32) 
{ 
    // Succesful run 
} 
else 
{ 
    if(SE_ERR_ASSOCINCOMPLETE==iResult) 
    { 
     QString ShellCmd = "C:\\Windows\\system32\\shell32.dll,OpenAs_RunDLL \""+file_path +"\""; 
     ShellExecuteA(0,"open", "C:\\Windows\\system32\\rundll32.exe",ShellCmd.toStdString().c_str(),NULL, SW_NORMAL); 
    } 
    else 
    { 
     // Errors 
    } 
} 

EDIT2「としてオープン」でファイルを開いて、ShellExecuteを(...)を使用してファイルを開こう:問題は、だったこと私は1つの簡単な方法を使用することです

QDesktopServices::openUrl(...) 

この機能

QUrl::fromLocalFile("<path_to_your_file>") 
+0

Windows上で "Open With"ダイアログを呼び出す正しい方法は、openas "動詞を指定する' ShellExecute/Ex() 'にターゲットファイル名を渡すことです。 shell32の 'OpenAs_RunDLL'を直接呼び出さないでください。 http://stackoverflow.com/questions/6364879/を参照してください。 –

答えて

2

に使用いけないQDesktopServices::openUrl

QDesktopServices::openUrl(QUrl::fromLocalFile("<path_to_your_file>")); 

このようにして、オペレーティングシステムに処理させることができます。プログラムがそのファイル(または一般的なURL)に関連付けられている場合、この機能を使用してデフォルトのブラウザでURLを開くこともできます)、オペレーティングシステムがそれを起動するか、デフォルトの「開く」ダイアログを表示します。

関連する問題