如何在OSX中强制一个Qt应用程序在执行时成为活动/前景窗口?

3
我正在学习在OSX上使用Qt的教程。我注意到一个问题,当我启动可执行文件(例如push button hello world示例)时,应用程序将作为后台窗口启动,我必须切换任务才能将其置于前景。如何强制Qt应用程序窗口在执行时成为前景窗口?
我想这样做是因为大多数应用程序都是这样运行的,更不用说手动切换任务会减慢我的编辑-编译-运行-调试周期速度了。
1个回答

0
你观察到的行为是由于在使用⌘-Y在调试器下启动应用程序时与调试器的交互所致。如果你仅使用⌘-R运行它,它会表现出你期望的行为。你的应用程序本身没问题。
直接从终端启动OS X应用程序的可执行文件将类似于使用⌘-Y运行它们--它们都在后台启动。Qt可能模仿Finder在通过⌘-R启动进程时执行的任何魔法--这种魔法可能简化为将子应用程序带到前台。在OS X上的gdb并不那么“聪明”,这可能有很好的理由。
OS X的方法是更努力地尝试不窃取焦点--我认为这是一件好事。
如果你只想运行应用程序而不是调试它,请修改你的启动命令,使其看起来像open -a '/Users/daj/foo/bar/baz.app',其中baz.app是应用程序包文件夹。不要添加尾随斜杠。
如果你可以诱导你的调试器跟随子进程,那么你当然可以在gdb下启动open本身,并且它将按预期工作--你的子应用程序在顶部。

我使用emacs / gcc而不是XCode或QtCreator。但是,如果我从终端运行可执行文件,它也会表现出这种行为。 - daj
如果您从终端启动本机OS X应用程序,则它们的行为方式相同。我刚在Cyberduck上尝试了一下。 - Kuba hasn't forgotten Monica
有没有想法如何在OSX中强制窃取焦点(至少我的一些应用程序会这样做)?不必通过Qt完成。手动任务切换通常很好,但在许多编辑-编译-运行-调试周期中开始累积。我想避免仅因此而切换开发环境... - daj
你需要深入研究Qt的内部机制,也许是它如何启动进程,因为不知怎么地,⌘-R可以正常工作。也许这段代码在Qt Creator中 -- 我不确定。 - Kuba hasn't forgotten Monica
请注意,切换开发环境是无法帮助您的。如果您在 gdb 下运行它,它不会在顶部启动。应用程序可以将自己提升到顶部,但您必须弄清楚如何做到这一点。⌘-R 不会通过调试器启动它,如果您只想要这个,那么您可以像在 emacs 下一样操作,详见编辑。 - Kuba hasn't forgotten Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接