Qt アプリでは、この関数を使用して chm ヘルプ ファイルを開きます。
void ToolBar::OpenHelp()
{
QDesktopService::openUrl(QUrl("my_help_file.chm")) ;
}
問題は、それをクリックしたときに、my_help_file.chm のインスタンスを 1 つだけ開きたいことです。これで、[開く] ボタンをクリックすると、いくつのインスタンスを開くことができます。なんとかできたら?
わかりました、このリンクから: https://qt-project.org/forums/viewthread/10945
およびこのクラス参照: http://harmattan-dev.nokia.com/docs/library/html/qt4/qdesktopservices.html#setUrlHandler
この問題の解決策を提案できますが、うまくいくかどうかはわかりません。UrlHandler を使用すると、openUrl 関数の動作をカスタマイズできます。
うーん、そう簡単にはいかないと思います。一見すると、QProcess を使用して自分で外部プロセスを生成すると思います。プラットフォームに依存しない方法でこれを行う方法については、qdesktopservices.cpp を参照してください。
_
この関数は、openUrl() の動作をカスタマイズする方法を提供します。指定されたスキームの URL で openUrl() が呼び出された場合、QDesktopServices が外部アプリケーションを起動する代わりに、レシーバー オブジェクトの指定されたメソッドが呼び出されます。
そのため、独自のプロセスを呼び出して処理できます。
この特定の関数で目的を達成するための良い方法はおそらくありません。アプリケーションでボタンがクリックされたかどうかを追跡することはできますが、URL を開くアプリケーションは不明であるため (何を (もしあれば) 開始するかを決定するのは OS 次第であるため)、そこにはありません。ユーザーが後でウィンドウを閉じたかどうかを知る良い方法です。