日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt 软键盘[模拟]之键盘触发事件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、打開Qt?Creater軟件,在'File'菜單中選擇'New?File?or?Project..'選項(xiàng),彈出的對話框如下所示:

???????

?????2、選擇?Qt?C++?Project?-->Qt?Gui?Project?,然后單擊'Choose..',進(jìn)入下面的界面后,Base?Class選擇QWidget,然后單擊?Next?:

??????

????????

?????3、進(jìn)入下面的界面,輸入Name?,單擊?Next?,再單擊?Finished?即可:

???????

?????4?、雙擊左側(cè)樹狀菜單里的QWidget.ui,

????????
?????5、計(jì)入界面設(shè)計(jì),設(shè)計(jì)如下:

?????????(這是程序運(yùn)行之后的效果)??

?????其中,按鈕的objectName都重新設(shè)置,如下所示:

??????

??????

?????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

????

????7widget.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;

?????}

???//初始化槽函數(shù)

?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按鈕觸發(fā)的事件

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

??}

???//單機(jī)'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("");

?}

???//獲取焦點(diǎn)

???void?Widget::getBtnFocus(int?num)

{

???int?j=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++;

????}

}

??//鍵盤事件

???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;

??????}

}

//按鍵盤的上鍵觸發(fā)的事件

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

??????????{??//當(dāng)焦點(diǎn)到list最后一個時(shí)

??????????????QPushButton?*btn1?=?*(list.begin());

??????????????btn1->setFocus();

??????????}

??????}

??????j++;

??}

}

void?Widget::keyDown()

{

??int?j=0;?//判斷是否到最后一個

??for(i=list.begin();?i!=list.end();?++i)

??{

??????QPushButton?*btn?=?*i;

??????if(btn->hasFocus())

??????{

??????????btn->clearFocus();

??????????if(j==0)

??????????{?//當(dāng)焦點(diǎn)到list第一個時(shí)

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

???}


與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Qt 软键盘[模拟]之键盘触发事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。