【QT4】请教:如何获得Caps Lock、Num Lock等锁的状态

Areos_cc 2010-11-09 08:35:50
请问在QT4中,如何获得各种锁的状态?检查其功能/键盘指示灯是否开启?
在帮助里面光找到了键值,但是不知道怎么查找相关函数
...全文
371 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areos_cc 2010-11-09
  • 打赏
  • 举报
回复
原来如此,没有现成的呀,怪不得我找了半天都没找到
十分感谢代码,留着以后学习
我先用时间过滤器增加一个NumLock按键,然后再用一个static bool变量做一个标志,“自制”一个检查NumLock吧~
多谢楼上~!
dext 2010-11-09
  • 打赏
  • 举报
回复
Qt 没有现成的。

Windows 上相对简单
GetKeyState(VK_NUMLOCK), GetKeyState(VK_CAPITAL), GetKeyState(VK_SCROLL)

Linux 上,我给你一段代码:

// file: numlock.cpp

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <stdio.h>

bool keyState(int iKey,Display *pDisplay)
{
int iKeyMask = 0;
Window wDummy1, wDummy2;
int iDummy3, iDummy4, iDummy5, iDummy6;
unsigned int iMask;
XModifierKeymap* map = XGetModifierMapping(pDisplay);
KeyCode keyCode = XKeysymToKeycode(pDisplay,iKey);
if(keyCode == NoSymbol) return false;
for(int i = 0; i < 8; ++i) {
if( map->modifiermap[map->max_keypermod * i] == keyCode) {
iKeyMask = 1 << i;
}
}
XQueryPointer(pDisplay, DefaultRootWindow(pDisplay), &wDummy1, &wDummy2,
&iDummy3, &iDummy4, &iDummy5, &iDummy6, &iMask );
XFreeModifiermap(map);
return (iMask & iKeyMask) != 0;
}

int main(void)
{
Display* pDisplay = XOpenDisplay( NULL );
if( pDisplay == NULL ) return 1;
printf("Scroll: %d\n",keyState(XK_Scroll_Lock,pDisplay));
printf("Caps : %d\n",keyState(XK_Caps_Lock,pDisplay));
printf("Num : %d\n",keyState(XK_Num_Lock,pDisplay));
XCloseDisplay(pDisplay);
return 0;
}



编译行:

g++ -o numlock -I/usr/include/X11 numlock.cpp -L/usr/X11R6/lib -lX11

21,476

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧