找回密码
 立即注册
收起左侧

如何屏蔽子控件的键盘动作?

2
回复
4990
查看
[复制链接]
累计签到:27 天
连续签到:1 天
来源: 2019-9-26 09:34:39 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 tovax 于 2019-9-26 09:37 编辑

主窗口是QMainWindow,包括若干个tableWidget和pushButton,想通过Key_Up和Key_Down实现某些其他功能,比如串口的发送;
于是就重写了KeyPressEvent,但是主窗口的焦点一般都在tableWidget,导致tableWidget先响应了按键的动作,而串口功能不能稳定的实现了;
也尝试过重新event和eventFilter,效果都差不多;
请各位该怎么处理呢?(以下是主窗口Central的键盘按下事件)

void Central::keyPressEvent(QKeyEvent *evt)
{
    switch (evt->key()) {
    case Qt::Key_Up:
        if (evt->isAutoRepeat()) {
            // evt->ignore();
        } else {
            qDebug() << "Key_Up Pressed.";
        }
        break;
    case Qt::Key_Down:
        if (evt->isAutoRepeat()) {
            // evt->ignore();
        } else {
            qDebug() << "Key_Down Pressed.";
        }
        break;
    default:
        // QMainWindow::keyReleaseEvent(evt); // Central::keyPressEvent(evt); // QWidget::keyPressEvent(evt);
        break;
    }

    // QMainWindow::keyReleaseEvent(evt);
}

回复

使用道具 举报

累计签到:12 天
连续签到:1 天
2019-9-30 16:48:25 显示全部楼层
一般来说  事件先传递给子控件 ,在子控件没有处理的情况下 会传给父类进行处理   所以 你的问题应该是在子类处理了KeyPressEvent中的事件
   Key_Up和Key_Down 导致事件没有传递  
回复

使用道具 举报

累计签到:27 天
连续签到:1 天
2019-10-25 20:42:48 显示全部楼层
carman 发表于 2019-9-30 16:48
一般来说  事件先传递给子控件 ,在子控件没有处理的情况下 会传给父类进行处理   所以 你的问题应该是在子 ...

谢谢你的回复!对事件传递的顺序还理解的不够,按你说的应该是可以的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了