1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Qt 软键盘[模拟]之键盘触发事件

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

时间:2022-04-23 09:22:14

相关推荐

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

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

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。