在 Qt 应用程序中使用此功能打开 chm 帮助文件:
void ToolBar::OpenHelp()
{
QDesktopService::openUrl(QUrl("my_help_file.chm")) ;
}
问题是当我单击它时,我希望它只打开 my_help_file.chm 的一个实例,现在我可以打开多少个实例,我单击打开按钮。如果能以某种方式完成?
好的,来自这个链接: 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 的应用程序(因为由操作系统决定启动什么(如果有的话)),因此没有了解用户是否随后关闭窗口的好方法。