【问题标题】:How to force a Qt Application to be the active/foreground window upon execution in OSX?在 OSX 中执行时,如何强制 Qt 应用程序成为活动/前台窗口?
【发布时间】:2012-06-24 04:46:04
【问题描述】:

我正在阅读有关 OSX 的 Qt 教程。我注意到的一件事是,当我启动可执行文件(例如,按钮 hello world 示例)时,应用程序将作为后台窗口启动,我必须切换任务才能将其置于前台。如何在执行时强制 Qt 应用程序窗口成为前台窗口?

我愿意这样做,因为这是大多数应用程序的行为方式,更不用说手动切换任务会减慢我的编辑-编译-运行-调试周期)。

【问题讨论】:

    标签: c++ macos qt user-interface window


    【解决方案1】:

    您观察到的行为是由于使用 ⌘-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。但是,如果我也从终端运行可执行文件,它的行为也会如此。
    • 从终端启动原生 OS X 应用程序的行为方式相同。刚刚在 Cyber​​duck 上试过。
    • 知道如何在 OSX 中强制窃取焦点(至少我的一些应用程序会这样做)?不必通过 Qt 来完成。手动任务切换通常很好,但是在许多编辑-编译-运行-调试周期开始加起来。我想避免仅仅为此切换开发环境......
    • 你必须看看 Qt 的内部结构,也许看看它是如何触发一个进程的,因为不知何故 ⌘-R 是正确的。也许该代码在 Qt Creator 中——我不知道。
    • 请注意,切换开发环境对您没有帮助。如果你在 gdb 下运行它,它不会从顶部开始,句号。该应用程序可以自行提升自身,但您必须弄清楚如何。 ⌘-R 不通过调试器启动它,如果这就是你想要的,那么你也可以在 emacs 下以同样的方式来做,见编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多