C++ 窃取焦点(理由充分)

C++ 窃取焦点(理由充分),c++,qt4,focus,qt-creator,C++,Qt4,Focus,Qt Creator,我正在研究的是的一个克隆,如果你使用过它,你就会知道它的一个特性是为了方便而窃取焦点 基本上,你点击“show”热键,应用程序就会出现,你可以在上面写字。 你可以用任何应用做任何事情(隐藏Yakuake),但一旦你点击热键,Yakuake就会出现并偷走焦点。我想对我的应用程序也这么做 我知道有一些窗口管理器规则阻止应用程序这么做,但Yakuake正在这么做,为什么我不能这么做 此外,该应用程序旨在与Windows、Linux和Mac兼容,因此没有KDE或Gnome或黑客;我不会走那条路,做那条路

我正在研究的是的一个克隆,如果你使用过它,你就会知道它的一个特性是为了方便而窃取焦点

基本上,你点击“show”热键,应用程序就会出现,你可以在上面写字。 你可以用任何应用做任何事情(隐藏Yakuake),但一旦你点击热键,Yakuake就会出现并偷走焦点。我想对我的应用程序也这么做

我知道有一些窗口管理器规则阻止应用程序这么做,但Yakuake正在这么做,为什么我不能这么做

此外,该应用程序旨在与Windows、Linux和Mac兼容,因此没有KDE或Gnome或黑客;我不会走那条路,做那条路

PS:我在C++和QT4中做这个应用程序。 编辑:


我只是想说清楚,我并没有要求任何代码(但如果你真的有一些例子,我会通知你)。我在寻求一种方法来做这件事。我应该怎么做才能让WM将焦点分配给我的应用程序。有没有标准的方法可以做到这一点?

有一种方法……

如果你想使用“显示”热键或快捷方式,你必须在键盘上创建并使用挂钩。

Qt不提供此类服务,因此您必须自己完成。

你可以看看这个帖子:

我不知道其他操作系统的情况


当您从钩子中获得右键盘事件时,您可以创建一个带有“allwas on top”提示的窗口,这应该是确定的。

解决方案比我想象的要简单。我做了一个持续时间为0的动画,在动画结束时,我只做了一个焦点。这就成功了。

我不是要一个AlwaysOnTop窗口(但即使我这样做了,AlwaysOnTop也不意味着它能以任何方式捕捉焦点)。我在寻求一种在显示应用程序(可以通过热键切换显示/隐藏)后实际窃取焦点的方法,也许这样:可以帮助你。@EarlGray我已经看到了,我认为它不起作用。无论如何,我会再试一次。附言:我不明白投票结果如何。我的问题有什么不对/不好的地方吗?我不是在问如何制造病毒或其他什么……我没有投票支持close:)但我很感谢你在提问之前为这个主题所做的努力,也许这就是原因(我也不明白)。@EarlGray是的,我知道不是你:)我只是想知道。@chac因为它依赖于X11(甚至可能依赖于KDE)感谢您提供的全局快捷方式提示,但我已经有了适用于所有平台的工作代码。我缺少的是焦点。正如我在另一个回复中的评论中所说,Sontop与FocusOwner并不相同。你看,你可以有一个AlwaysOnTop窗口(比方说VLC播放视频),你可以在Skype聊天窗口中获得焦点(写作)。看到区别了吗?是的,我看到区别了。我误解了你的问题。也许有一些操作系统API在做这件事,但我对此不太了解。很抱歉