加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2011-04-02 20:00:00)
标签:

qt

软键盘

键盘触发

获得焦点

校园

分类: Qt编程

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

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

      http://s5/middle/5f08aea049fede77fb9b4&690软键盘[模拟]之键盘触发事件" TITLE="Qt 软键盘[模拟]之键盘触发事件" />

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

       http://s12/middle/5f08aea049fede76aab7b&690软键盘[模拟]之键盘触发事件" TITLE="Qt 软键盘[模拟]之键盘触发事件" />

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

      http://s5/middle/5f08aea049fede76bbd54&690软键盘[模拟]之键盘触发事件" TITLE="Qt 软键盘[模拟]之键盘触发事件" />

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

      http://s10/middle/5f08aea049fee02bcfee9&690软键盘[模拟]之键盘触发事件" TITLE="Qt 软键盘[模拟]之键盘触发事件" />
     5、计入界面设计,设计如下:

     http://s9/middle/5f08aea049fedc92e46a8&690软键盘[模拟]之键盘触发事件" TITLE="Qt 软键盘[模拟]之键盘触发事件" />    (这是程序运行之后的效果)  

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

      http://s1/bmiddle/5f08aea049fee0bc4a9a0&690软键盘[模拟]之键盘触发事件" TITLE="Qt 软键盘[模拟]之键盘触发事件" />

     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
    
    7、widget.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 s = 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; //用来判断list中的第几个按钮
     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();
         }


               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)
       {


               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 ------------------------------------
    

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有