vc和tc的最大区别就是,一般用tc写类似的程序都会用循环访问getch之类的方法,而VC不同,采用的是完全不同的消息驱动。
当系统按下了一个按钮的时候,你就会接受到一个WM_KEYDOWN消息。
只要你响应了WM_KEYDOWN就可以在键盘按下一个键得到通知。
具体如何响应一个消息请参考相关的资料(MSDN)。
因为问题过于复杂,呵呵比如说你是SDK程序还是MFC程序,没法说清楚。
您好,Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面关注点在按键特有的部分:
focus
一个拥有焦点(focus)的QWidget才可以接受键盘事件。有输入焦点的窗口是活动窗口或活动窗口子窗口或子子窗口等。
焦点移动的方式有以下几种:
按下Tab或Shift+Tab
注意:文本编译器(一般需要插入Tab),或者WebView(需要Tab来移动超链接焦点) 等
Qt中,需要输入Tab的地方可以用 Ctrl+Tab 或 Ctrl+Shift+Tab 替代。
点击一个QWidget
建议:只对接受文本输入的Widget启用该功能
按下键盘的快捷键
QLabel::setBuddy(), QGroupBox,以及 QTabBar 支持
使用鼠标滚轮
用户移动焦点
程序将决定被设置focus的Widget的哪一个子Widget获得焦点
注意:如果一个 Widget 已经 grabKeyboard,所有键盘事件将发送到该Widget而不是获得焦点的Widget
focusPolicy
一个QWidget获得焦点的方式受 focusPolicy 控制
Qt::TabFocus
通过Tab键获得焦点
Qt::ClickFocus
通过被单击获得焦点
Qt::StrongFocus
可通过上面两种方式获得焦点
Qt::NoFocus
不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点
keypress和keyrelease
首先,我们要是Widget获得焦点,一般设置focusPolicy。
然后要对按键进行响应,我们只需要直接重载:
keyPressEvent
keyReleaseEvent
注意:
对我们不处理的事件,要调用父类的相应事件处理函数。
如果widget当前没有焦点,考虑到事件转发:如果其子widget有焦点,那么该widget未处理的键盘事件将被转发过来。
有时输入焦点不在任何窗口中。这种情况发生在所有程序都是最小化的时候。这时,Windows将继续向活动窗口发送键盘消息,但是这些消息与发送给非最小化的活动窗口的键盘消息有不同的形式。
QKeyEvent
在windows下,与键盘事件有关的有8个消息:
对产生可显示字符的按键组合,Windows不仅给程序发送按键消息,而且还发送字符消息
有些键不产生字符,这些键包括shift键、功能键、光标移动键和特殊字符键如Insert和Delete。对于这些键,Windows只产生按键消息。
这些消息在Qt中只体现在QKeyEvent中。
对字符,可通过 QKeyEvent::text() 获得
其他键,QKeyEvent::key() 获得一个键值
event函数
由于 Tab 键被用来切换焦点,这使得它与众不同。
这是qwidgetcpp的event函数中的代码片段:
case QEvent::KeyPress:
{
QKeyEvent k = (QKeyEvent )event;
bool res = false;
if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier)))
{ //### Add MetaModifier
if (k->key() == Qt::Key_Backtab || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier)))
res = focusNextPrevChild(false);
else if (k->key() == Qt::Key_Tab)
res = focusNextPrevChild(true);
if (res)
break;
}
keyPressEvent(k);
}
如果我们需要处理Tab键,需要重载 event 函数。
MTK里面关于虚拟键盘(VK),都有写好的touch down 和 up, repeat, move, longpress等事件。
当down的时候,根据VK的类型,和你点击的坐标,进行判断是否按键有效,如果有效就会在相应的按键区域重绘。
根据你的描述,我猜想在down的时候可能返回了非法值,或者别的问题。你在modis上打上断点,先看坐标是否正确,并且键盘类型也正确,而返回非法值的话,那应该是键盘的布局(layout)错了。
希望我的回答能帮你找到问题的根源。顺便说一句,掌握MTK的调试方法很重要,即使对一个模块不清楚,解决问题都很快捷。
以上就是关于VC中如何获得按键的信息啊全部的内容,包括:VC中如何获得按键的信息啊、Qt如何捕获键盘事件、mtk中如何获取虚拟键盘按键消息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)