h文件中声明下面两个函数
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
.cpp文件中实现两个函数
void record::keyPressEvent(QKeyEvent *event)
{
switch(event->key()){
case Qt::Key_Alt:
alt_key = KEY_STATE_Press;
CLogC_debug("%s:This is debug: alt_key Press\n", __FUNCTION__);
break;
case Qt::Key_Control:
ctrl_key = KEY_STATE_Press;
CLogC_debug("%s:This is debug: ctrl_key Press\n", __FUNCTION__);
break;
}
}
void record::keyReleaseEvent(QKeyEvent *event)
{
switch(event->key()){
case Qt::Key_Alt:
alt_key = KEY_STATE_Release;
CLogC_debug("%s:This is debug: alt_key Release\n", __FUNCTION__);
break;
case Qt::Key_Control:
ctrl_key = KEY_STATE_Release;
CLogC_debug("%s:This is debug: ctrl_key Release\n", __FUNCTION__);
break;
}
}
后来发现press不能用,出现不了,主要原因是mainwindow目前拥有获取键盘的焦点,导致其他子widget界面不能获取键盘事件焦点
解决办法:在构造函数加入:
this->grabKeyboard();
这个小组件接收所有的键盘事件,直到调用releaseKeyboard();其他小组件完全没有得到键盘事件。鼠标事件不受影响。如果你想抓取,请使用 grabMouse() 。
setFocus()像往常一样移动焦点,但新的焦点部件只有在调用releaseKeyboard()后才能接收键盘事件。
如果一个不同的小组件目前正在抓取键盘输入,该小组件的抓取会首先被释放。
参见releaseKeyboard(), grabMouse(), releaseMouse(), and focusWidget()。
这个 grabKeyboard会影响其他界面的键盘输入
这是就调用 类对象->releaseKeyboard(); //释放键盘获取
类对象->grabKeyboard(); //获取键盘的获取权
这就是界面切换:切换到会诊中心界面,让record界面释放键盘获取权,切换到record界面,取得键盘获取权
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击这里: