QT捕获键盘那个按键按下和松开,这里用ctrl和alt键做出单选和多选

.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界面,取得键盘获取权


版权声明:本文为qq_40170041原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。