11

Linuxは簡単そうです: xdg-open <file/directory/URL>.

どうやら、Macも同様です:openの代わりに使用する必要がありxdg-openます。Mac にアクセスできないため、テストできませんでした。

Windowsの場合、4 つの異なる提案が見つかりましたが、試したものは失敗しました。

system()andQProcess::startDetached()を引数として最初の 3 つを試しました"http://www.stackoverflow.com"が、すべて失敗しました。startただし、コマンドラインからは問題なく動作します。まだ試しShellExecuteていません。

に相当する Windows は何xdg-openですか? それは私には思えますがstart、なぜ私の試みはstart失敗したのですか?

ShellExecute私の唯一のオプションですか?


EDITQDesktopServices::openUrl()ファイルやディレクトリでは機能しなかったため、Webページのみだと思いました。

いくつかのデバッグの後、Windows のパスを に置き換える\\/、ファイルに対しては機能しますが、ディレクトリはまだ開かれていないことがわかりました。私が間違っていることは何ですか?

QDir dir("C:/Documents and Settings/ali");

qDebug() << "Exists? " << dir.exists();

qDebug() << dir.absolutePath();

QDesktopServices::openUrl(QUrl(dir.absolutePath()));

qDebug() << "External app called";

アプリケーション出力:

Exists?  true 
"C:/Documents and Settings/ali" 
External app called 

しかし、何も起こらず、ディレクトリは開かれません。Linux では、ディレクトリは期待どおりデフォルトのファイル マネージャで開かれます。


解決策: Qt のバグWindows の癖 (不正なアプリケーション ウィンドウ) により、最終的にShellExecute. これにより、ある程度の費用を払って、私が望むものを正確に達成するのに十分な柔軟性が得られます...

4

1 に答える 1

17

これに Qt のサポートを使用しないのはなぜですか? 例えば:

QDesktopServices::openUrl(QUrl("/home/realnc/test.pdf"));

これにより、ドキュメントが Acrobat Reader で開きます。一般に、1 つ以上のアプリケーションが関連付けられているすべてのファイル タイプについて、OS の優先アプリケーション設定に従います。何よりも、プラットフォームに依存しません。

編集:Linuxではディレクトリを開くが、Windowsでは開かないという事実は、バグのようなにおいがします。これをQt のバグトラッカーで報告するのが最善かもしれません。それまでの間、ファイルがディレクトリである場合の Windows の回避策があります。

#ifdef Q_WS_WIN
    if (QFileInfo(path).isDir())
        QProcess::startDetached("explorer", QStringList(path));
    else
#endif
        QDesktopServices::openUrl(QUrl(path));

cmd.exe の start コマンドを使用して実行することもできますが、数分の 1 秒の間、​​醜い端末ポップアップが表示されます。

QProcess::startDetached("cmd", QStringList() << "/C" << "start"
                               << QDir::toNativeSeparators(path));
于 2012-12-07T16:33:57.113 に答える