您的位置:首页 > 编程语言 > Qt开发

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

2013-07-23 09:34 597 查看


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,

      


     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


    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();
}








                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: