QT__事件之锁住键盘__操作

 锁定按键:
#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QWidget>
#include <QPushButton>
//-----------------------------------------------------
class TestOther :public QWidget
{
public:
    TestOther(QWidget *parent = 0);
};
//-----------------------------------------------------
class Widget : public QWidget
{
    Q_OBJECT
    
public:
    Widget(QWidget *parent = 0);
    ~Widget();
private slots:
    void LockKey();
    void showOther();
protected:    
    bool eventFilter(QObject *target, QEvent *event);
    bool bLockKey;
    QPushButton *ptnLock;
};

#endif // WIDGET_H

//--------------------------------------------------------
#include "widget.h"
#include <QMessageBox>
#include <QGridLayout>
#include <QLineEdit>
#include <QKeyEvent>
#include <QTextCodec>
#include <QApplication>
#include <QPushButton>
//原理就是利用事件过滤器来做的。第一步安装事件过滤器,第二步重载eventFilter函数。
//-------------------------------------------------------
TestOther::TestOther(QWidget *parent)
    : QWidget(parent)
{
   QGridLayout *gridWin=new QGridLayout;
   QLineEdit *line1=new QLineEdit;
   QLineEdit *line2=new QLineEdit;

    gridWin->addWidget(line1,0,0);
    gridWin->addWidget(line2,1,0);
    setLayout(gridWin);
}

//-------------------------------------------------------
Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    qApp->installEventFilter(this);  //安装事件过滤器。qApp为应用程序的全局变量名

   bLockKey=false;

    QGridLayout *gridWin=new QGridLayout;
   QLineEdit *line1=new QLineEdit;
   QLineEdit *line2=new QLineEdit;

   ptnLock=new QPushButton("Lock");
   connect(ptnLock,SIGNAL(clicked()),this,SLOT(LockKey()));

 QPushButton  *ptnTest=new QPushButton("show other");
   connect(ptnTest,SIGNAL(clicked()),this,SLOT(showOther()));


    gridWin->addWidget(line1,0,0);
    gridWin->addWidget(line2,1,0);
    gridWin->addWidget(ptnLock,2,0);
    gridWin->addWidget(ptnTest,3,0);
    setLayout(gridWin);

}

Widget::~Widget()
{
    
}
bool Widget::eventFilter(QObject *target, QEvent *event)
{

    if (event->type() == QEvent::KeyPress)
    {
        if(bLockKey!=true)
         {
            QWidget::eventFilter(target, event);//抛个父类
         }
    }
    else
    {
       QWidget::eventFilter(target, event);//抛个父类
    }
}
void Widget::LockKey()
{

    if(ptnLock->text()=="Lock")
    {
        ptnLock->setText("Unlock");
        bLockKey=true;
    }
    else
    {
        ptnLock->setText("Lock");
        bLockKey=false;
    }
}
void Widget::showOther()
{
   TestOther  *test=new TestOther;
   test->show();

}




                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值