[转载]Qt 软键盘[模拟]之键盘触发事件

 关键词:键盘触发事件、QList用法、清除/获得焦点、CSSQt初学教程

     1、打开Qt Creater软件,在'File'菜单中选择'New File or Project..'选项,弹出的对话框如下所示:

       Qt <wbr>软键盘[模拟]之键盘触发事件

     2、选择 Qt C++ Project -->Qt Gui Project ,然后单击'Choose..',进入下面的界面后,Base Class选择QWidget,然后单击 Next :

      

        Qt <wbr>软键盘[模拟]之键盘触发事件

     3、进入下面的界面,输入Name ,单击 Next ,再单击 Finished 即可:

       Qt <wbr>软键盘[模拟]之键盘触发事件

     、双击左侧树状菜单里的QWidget.ui,

       Qt <wbr>软键盘[模拟]之键盘触发事件 
     5、计入界面设计,设计如下:

      Qt <wbr>软键盘[模拟]之键盘触发事件   (这是程序运行之后的效果)  

     其中,按钮的objectName都重新设置,如下所示:

      Qt <wbr>软键盘[模拟]之键盘触发事件

      

     6、双击树状菜单中的QWidget.h,编写头文件如下:    

      #ifndef WIDGET_H
      #define WIDGET_H
      #include <QWidget>
      #include <QDebug> 
      #include<QKeyEvent>
      #include <QList>
      #include <QPushButton>
      #include <QStyle>
      namespace Ui {
           class Widget;
      }
      class Widget public QWidget
      {
         Q_OBJECT
       public:
         explicit Widget(QWidget *parent 0);
         ~Widget();

      protected
          void keyPressEvent(QKeyEvent *k);      
        private:
             Ui::Widget *ui;
             QList<QPushButton*> list;
             QList<QPushButton*>::iterator i;
        private slots:

             void init();//初始化

             QList<QPushButton*> uniteAllBtn(); //将所有按钮放到List    

             void upKeyEvent(QPushButton*);  
             void getBtnFocus(int num);

             void zeroBtnClicked();
             void oneBtnClicked();
             void twoBtnClicked();
             void threeBtnClicked();
             void fourBtnClicked();
             void fiveBtnClicked();
             void sixBtnClicked();
             void sevenBtnClicked();
             void eightBtnClicked();
             void nineBtnClicked();
             void backBtnClicked();
             void clearClicked();
            //键盘上下键事件
            void keyUp();
            void keyDown();
            void keyLeft();
            void keyRight();
        };
    #endif // WIDGET_H

    

    7widget.cpp

    //----------------------------------------------------

        #include "widget.h"#include "ui_widget.h"

        Widget::Widget(QWidget *parent) :

         QWidget(parent),

        ui(new Ui::Widget)

   {

       ui->setupUi(this);

           this->init();

             list = this->uniteAllBtn();

    }

    Widget::~Widget()

     {

      delete ui;

     }

   //初始化槽函数

 void Widget::init()

  {

       connect(ui->zeroBtn,SIGNAL(clicked()),this,SLOT(zeroBtnClicked()));

       connect(ui->oneBtn,SIGNAL(clicked()),this,SLOT(oneBtnClicked()));

       connect(ui->twoBtn,SIGNAL(clicked()),this,SLOT(twoBtnClicked()));

       connect(ui->threeBtn,SIGNAL(clicked()),this,SLOT(threeBtnClicked()));

       connect(ui->fourBtn,SIGNAL(clicked()),this,SLOT(fourBtnClicked()));

       connect(ui->fiveBtn,SIGNAL(clicked()),this,SLOT(fiveBtnClicked()));

       connect(ui->sixBtn,SIGNAL(clicked()),this,SLOT(sixBtnClicked()));

       connect(ui->sevenBtn,SIGNAL(clicked()),this,SLOT(sevenBtnClicked()));

       connect(ui->eightBtn,SIGNAL(clicked()),this,SLOT(eightBtnClicked()));

       connect(ui->nineBtn,SIGNAL(clicked()),this,SLOT(nineBtnClicked()));

       connect(ui->backBtn,SIGNAL(clicked()),this,SLOT(backBtnClicked()));

       connect(ui->clearBtn,SIGNAL(clicked()),this,SLOT(clearClicked()));

  }

   //将所有按钮装入一个Qlist

QList<QPushButton*> Widget::uniteAllBtn()

  {

     QList<QPushButton*> list;

      list.append(ui->zeroBtn);

      list.append(ui->oneBtn);

      list.append(ui->twoBtn);

      list.append(ui->threeBtn);

      list.append(ui->fourBtn);

      list.append(ui->fiveBtn);

      list.append(ui->sixBtn);

      list.append(ui->sevenBtn);

      list.append(ui->eightBtn);

      list.append(ui->nineBtn);

      list.append(ui->backBtn);

      list.append(ui->clearBtn);

      return list;

 }

   //单击0按钮触发的事件

   void Widget::zeroBtnClicked()

{

     ui->lineEdit->setText(ui->lineEdit->text()+"0");

     getBtnFocus(0);

     ui->zeroBtn->setStyleSheet("QPushButton:pressed{background-color: 

                                          rgb(255, 55,15);}");

   }

   //单击1按钮

void Widget::oneBtnClicked()

 {

   ui->lineEdit->setText(ui->lineEdit->text()+"1");

    getBtnFocus(1);

  }

   //单击'2'按钮

void Widget::twoBtnClicked()

  

    ui->lineEdit->setText(ui->lineEdit->text()+"2");

    getBtnFocus(2);

  }

   //单机'3'按钮

void Widget::threeBtnClicked()

   {

   ui->lineEdit->setText(ui->lineEdit->text()+"3");

    getBtnFocus(3);

  }

   //4

  void Widget::fourBtnClicked()

{

   ui->lineEdit->setText(ui->lineEdit->text()+"4");

   getBtnFocus(4);

   }

   //5

  void Widget::fiveBtnClicked()

{

   ui->lineEdit->setText(ui->lineEdit->text()+"5");

    getBtnFocus(5);

  }

//6

  void Widget::sixBtnClicked()

 {

   ui->lineEdit->setText(ui->lineEdit->text()+"6");

    getBtnFocus(6);

  }

//7

  void Widget::sevenBtnClicked()

   {

   ui->lineEdit->setText(ui->lineEdit->text()+"7");

    getBtnFocus(7);

  }

//8

  void Widget::eightBtnClicked()

   {

   ui->lineEdit->setText(ui->lineEdit->text()+"8");

    getBtnFocus(8);

  }

//9

 void Widget::nineBtnClicked()

{

   ui->lineEdit->setText(ui->lineEdit->text()+"9");

    getBtnFocus(9);

 }

   //退格键

void Widget::backBtnClicked()

{

     QString = ui->lineEdit->text();

     int len = s.length();

    QString s2 = s.remove(len-1,1);

      qDebug()<<s2;

     ui->lineEdit->setText(s2);

   getBtnFocus(10);

 }

//清空

 void Widget::clearClicked()

  {

   getBtnFocus(11);

    ui->lineEdit->setText("");

 }

   //获取焦点

   void Widget::getBtnFocus(int num)

{

   int j=0;

    for(i=list.begin(); i!=list.end(); ++i)

     {

       QPushButton *btn = *i;

          if(num == j)

        {

           btn->setFocus();

             btn->setStyleSheet("background-color: rgb(255, 55, 15);");

       }

       else

        {

           btn->clearFocus();

           btn->setStyleSheet("");

          }

         j++;

    }

}

  //键盘事件

   void Widget::keyPressEvent(QKeyEvent *k)

 {

   switch(k->key()){

      case Qt::Key_8:

           keyUp();

           break;

      case Qt::Key_2:

           keyDown();

           break;

      case Qt::Key_4:

          keyLeft();break;

      case Qt::Key_6:

          keyRight();break;

      }

}

//按键盘的上键触发的事件

void Widget::keyUp()

{

  int j=0; //判断是否到最后一个

  for(i=list.begin(); i!=list.end(); ++i)

  {

     // qDebug() << list.size();

      QPushButton *btn = *i;

      if(btn->hasFocus())

      {

           btn->clearFocus();

          if(j<list.size()-1){

              QPushButton *btn1 = *(++i);

              btn1->setFocus();

         }

          else

          {  //当焦点到list最后一个时

              QPushButton *btn1 = *(list.begin());

              btn1->setFocus();

          }

      }

      j++;

  }

}

void Widget::keyDown()

{

  int j=0; //判断是否到最后一个

  for(i=list.begin(); i!=list.end(); ++i)

  {

      QPushButton *btn = *i;

      if(btn->hasFocus())

      {

          btn->clearFocus();

          if(j==0)

          { //当焦点到list第一个时

              QPushButton *btn2 = *(--list.end());

              qDebug()<<btn2->objectName();

              btn2->setFocus();

         }

          else

          {

              QPushButton *btn1 = *(--i);

              btn1->setFocus();

          }

      }

      j++;

  }

}

void Widget::keyLeft()

{

  keyUp();

}

void Widget::keyRight()

{

   keyUp();

}

8、main.cpp不用做修改

     #include <QtGui/QApplication>

    #include "widget.h"

    int main(int argc, char *argv[])

   {

      QApplication a(argc, argv);

      Widget w;

      w.show();

     return a.exec();

   }


//--------------------------------- the end -----------------------------------

转载于:http://blog.sina.com.cn/s/blog_5f08aea00100pkar.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值