Qt 底层输入的截获InputMethod 方法的简单应用

本文介绍了如何在Qt项目中实现屏保功能,并在屏保期间拦截键盘和鼠标事件,防止屏保被意外唤醒。通过在QApplication对象上安装事件过滤器,以及利用Qt的InputMethod类,重载过滤器函数,确保在屏保状态下不处理任何输入事件。
摘要由CSDN通过智能技术生成

           最近做项目中用到屏保,在按键或者触屏之后唤醒屏保,在之前的文章中已经写好了用屏保的QWSServer类的只用,我们找那个方法用触摸唤醒的话,如果正好手指是触摸在一个有动作的按钮上,那马屏保恢复之后看见的屏幕不是屏保之前的界面了,这次项目上要求唤醒的时候这个情况不能发生,那么就要求触摸屏事件和键盘事件不能向应用窗口发送才能实现,考虑或很多方法,比如我在唤醒屏保后进入函数的执行的第一句就是发送个信号,给应用程序中的app上安装事件过滤器,事件过滤器中把事件过滤掉,在app中安装时间过滤器的方法:

1、首先重载过滤器函数,在前面的屏保中定义一个信号,在程序刚进入屏保的时候把这个触发的鼠标或者键盘事件过滤后移除过滤器。由于QWSServer类是在Qt中直接定义的,是个虚基类,需要重载才能使用,继承这个类重载里面的save()和restore()函数之后才能用,这部分在屏保部分说明,想实现信号槽功能,这个类必须多重继承,在继承QWSServer类的同时继承QObject,并且把QObject放在前面才能实现信号槽的功能。

bool mainwindos::eventFilter(QObject *target, QEvent *event)
{

    if (event->type() == QEvent::MouseButtonDblClick
            || event->type() == QEvent::MouseButtonPress
            || event->type() == QEvent::MouseButtonRelease
            || event->type() == QEvent::MouseMove
            || event->type() == QEvent::MouseTrackingChange || event->type()==QEvent::KeyPress
            || event->type() == QEvent::KeyRelease)
    {
         qDebug("a keyboard or mouse event ");
        event->ignore();
        return true;
     }
    else
        return QWidget::eventFilter(target,event);


}

在QApplication对象上安装事件过滤器

  qApp->removeEventFilter(this);

因为qApp是指向QApplication对象的。

 

也可以在事件过滤器中过滤特定的键值

 bool process_base::eventFilter(QObject *target, QEvent *event)
 {
//     qDebug("event filter entered %d",i);
     if ( event->type()==QEvent::KeyPress)

     {
         QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值