1、打开Qt Creater软件,在'File'菜单中选择'New File or Project..'选项,弹出的对话框如下所示:
2、选择 Qt C++ Project -->Qt Gui Project ,然后单击'Choose..',进入下面的界面后,Base Class选择QWidget,然后单击 Next :
3、进入下面的界面,输入Name ,单击 Next ,再单击 Finished 即可:
4 、双击左侧树状菜单里的QWidget.ui,
其中,按钮的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
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(); }