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

出处:http://blog.sina.com.cn/s/blog_5f08aea00100pkab.html



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

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

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

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

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

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

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

      Qt <wbr>软键盘[模拟]之键盘触发事件
     5、计入界面设计,设计如下:

     Qt <wbr>软键盘[模拟]之键盘触发事件    (这是程序运行之后的效果)  

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

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

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

private:
	QPushButton *btn;
};     
#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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值