我正在使用Qt在C++中创建一个跨平台实用程序,我需要有快捷键(或热键,不确定区别).本质上,应用程序将运行并且仅在系统托盘中作为图标显示,并且当您按某些快捷键(例如,Ctrl-Shift-f4或其他)时执行操作.
我的印象是Qt没有提供处理快捷键的方法,除非应用程序处于焦点,在我的情况下它不会.所以,那就是了(如果这是一个可行的选择,请告诉我).
我发现了大量的示例/文档解释如何使用Xlib/Xcb for linux,win32 api for windows和carbon for osx,但我很难找到一种方法来实现这一点Qt应用程序的范围.
什么是实现我需要的方法?
我正在尝试为远程桌面型客户端获取所有键盘事件.我不希望像ALT-Tab这样的东西被Gnome3/KDE/Openbox/etc ...桌面抓住,我希望我的应用程序能够让所有这些事件和其他应用程序无法获得该事件.
我现在正在做这样的事情:
grabKeyboard() // qt function
Display *display = XOpenDisplay(NULL);
XGrabKeyboard(display, winId(), True, GrabModeAsync, GrabModeAsync, CurrentTime);
Run Code Online (Sandbox Code Playgroud)
这实际上似乎与ALT-Tab一起工作正常,但在Openbox中有一堆键盘快捷键被定义为"显示桌面"(ALT-CTRL-END)和"重置X"(CTRL-ALT-R)被捕获通过Openbox.我注意到FreeRDP做了这样的事情:
int input_mask =
KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask |
VisibilityChangeMask | FocusChangeMask | StructureNotifyMask |
PointerMotionMask | ExposureMask | PropertyChangeMask;
XSelectInput(display, winId(), input_mask);
Run Code Online (Sandbox Code Playgroud)
除了我上面的代码之外,我已经尝试了它,但它不起作用.
我也注意到Remmina使用gdk_device_grab,但由于我的应用程序不是GTK应用程序,我无法调用它.有人可以帮忙吗?
我正在编写一个 Qt 应用程序。在第一阶段,我想接收系统范围内的所有按键事件,而不创建任何小部件。
这在 Qt 中是可能的,还是我必须挂钩到底层的窗口系统?(这需要跨平台。)