1、打开QtCreater软件,在'File'菜单中选择'NewFileorProject..'选项,弹出的对话框如下所示:
2、选择QtC++Project-->QtGuiProject,然后单击'Choose..',进入下面的界面后,BaseClass选择QWidget,然后单击Next:
3、进入下面的界面,输入Name,单击Next,再单击Finished即可:
4、双击左侧树状菜单里的QWidget.ui,
5、计入界面设计,设计如下:
(这是程序运行之后的效果)
其中,按钮的objectName都重新设置,如下所示:
6、双击树状菜单中的QWidget.h,编写头文件如下:
#ifndefWIDGET_H
#defineWIDGET_H
#include<QWidget>
#include<QDebug>
#include<QKeyEvent>
#include<QList>
#include<QPushButton>
#include<QStyle>
namespaceUi{
classWidget;
}
classWidget:publicQWidget
{
Q_OBJECT
public:
explicitWidget(QWidget*parent=0);
~Widget();
protected:
voidkeyPressEvent(QKeyEvent*k);
private:
Ui::Widget*ui;
QList<QPushButton*>list;
QList<QPushButton*>::iteratori;
privateslots:
voidinit();//初始化
QList<QPushButton*>uniteAllBtn();//将所有按钮放到List中
voidupKeyEvent(QPushButton*);
voidgetBtnFocus(intnum);
voidzeroBtnClicked();
voidoneBtnClicked();
voidtwoBtnClicked();
voidthreeBtnClicked();
voidfourBtnClicked();
voidfiveBtnClicked();
voidsixBtnClicked();
voidsevenBtnClicked();
voideightBtnClicked();
voidnineBtnClicked();
voidbackBtnClicked();
voidclearClicked();
//键盘上下键事件
voidkeyUp();
voidkeyDown();
voidkeyLeft();
voidkeyRight();
};
#endif//WIDGET_H
7、widget.cpp
//----------------------------------------------------
#include"widget.h"#include"ui_widget.h"
Widget::Widget(QWidget*parent):
QWidget(parent),
ui(newUi::Widget)
{
ui->setupUi(this);
this->init();
list=this->uniteAllBtn();
}
Widget::~Widget()
{
deleteui;
}
//初始化槽函数
voidWidget::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);
returnlist;
}
//单击‘0’按钮触发的事件
voidWidget::zeroBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"0");
getBtnFocus(0);
ui->zeroBtn->setStyleSheet("QPushButton:pressed{background-color:
rgb(255,55,15);}");
}
//单击‘1’按钮
voidWidget::oneBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"1");
getBtnFocus(1);
}
//单击'2'按钮
voidWidget::twoBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"2");
getBtnFocus(2);
}
//单机'3'按钮
voidWidget::threeBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"3");
getBtnFocus(3);
}
//4
voidWidget::fourBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"4");
getBtnFocus(4);
}
//5
voidWidget::fiveBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"5");
getBtnFocus(5);
}
//6
voidWidget::sixBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"6");
getBtnFocus(6);
}
//7
voidWidget::sevenBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"7");
getBtnFocus(7);
}
//8
voidWidget::eightBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"8");
getBtnFocus(8);
}
//9
voidWidget::nineBtnClicked()
{
ui->lineEdit->setText(ui->lineEdit->text()+"9");
getBtnFocus(9);
}
//退格键
voidWidget::backBtnClicked()
{
QStrings=ui->lineEdit->text();
intlen=s.length();
QStrings2=s.remove(len-1,1);
qDebug()<<s2;
ui->lineEdit->setText(s2);
getBtnFocus(10);
}
//清空
voidWidget::clearClicked()
{
getBtnFocus(11);
ui->lineEdit->setText("");
}
//获取焦点
voidWidget::getBtnFocus(intnum)
{
intj=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++;
}
}
//键盘事件
voidWidget::keyPressEvent(QKeyEvent*k)
{
switch(k->key()){
caseQt::Key_8:
keyUp();
break;
caseQt::Key_2:
keyDown();
break;
caseQt::Key_4:
keyLeft();break;
caseQt::Key_6:
keyRight();break;
}
}
//按键盘的上键触发的事件
voidWidget::keyUp()
{
intj=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++;
}
}
voidWidget::keyDown()
{
intj=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++;
}
}
voidWidget::keyLeft()
{
keyUp();
}
voidWidget::keyRight()
{
keyUp();
}
8、main.cpp不用做修改
#include<QtGui/QApplication>
#include"widget.h"
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
Widget w;
w.show();
returna.exec();
}