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

来源:互联网 发布:新手淘宝网卖什么 编辑:程序博客网 时间:2024/06/08 17:54

 

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

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

      

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

    

       

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

      

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

      
     5、计入界面设计,设计如下:

       (是序运行之后的效果)  

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

    

      

     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
原创粉丝点击