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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt实战开发-数字软键盘

發(fā)布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt实战开发-数字软键盘 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

開發(fā)的思路

  • 布局鍵盤界面
  • 每一個button對應(yīng)一個槽函數(shù)
  • 把輸入的字符返回到點擊處的文本編輯框

    開發(fā)過程

  • 首先定義功能button,在頭文件中定義

QString getText();QPushButton *num6Button;QPushButton *backspaceButton;QPushButton *num4Button;QPushButton *okButton;QPushButton *leftButton;QPushButton *num1Button;QPushButton *cancelButton;QPushButton *rightButton;QPushButton *num9Button;QPushButton *num8Button;QPushButton *num2Button;QPushButton *num7Button;QPushButton *dotButton;QPushButton *num3Button;QPushButton *num0Button;QPushButton *num5Button;QPushButton *signButton;QLineEdit *lineEdit;

接著定義相關(guān)聯(lián)的槽函數(shù)

void on_num1Button_clicked();void on_num2Button_clicked();void on_num3Button_clicked();void on_num4Button_clicked();void on_num5Button_clicked();void on_num6Button_clicked();void on_num7Button_clicked();void on_num8Button_clicked();void on_num9Button_clicked();void on_dotButton_clicked();void on_num0Button_clicked();void on_signButton_clicked();void on_leftButton_clicked();void on_rightButton_clicked();void on_backspaceButton_clicked();void on_cancelButton_clicked();void on_okButton_clicked();

下面定義界面布局顯示的功能模塊

okButton = new QPushButton(this);okButton->setText(" OK");okButton->setGeometry(QRect(190, 250, 110, 50));QFont font1;font1.setPointSize(14);okButton->setFont(font1);backspaceButton = new QPushButton(this);backspaceButton->setText(" backspace");backspaceButton->setGeometry(QRect(190, 130, 110, 50));backspaceButton->setFont(font1);num6Button = new QPushButton(this);num6Button->setText("6");num6Button->setGeometry(QRect(130, 130, 50, 50));QFont font;font.setPointSize(22);num6Button->setFont(font);num4Button = new QPushButton(this);num4Button->setText(" 4");num4Button->setGeometry(QRect(10, 130, 50, 50));num4Button->setFont(font);leftButton = new QPushButton(this);leftButton->setText("<-");leftButton->setGeometry(QRect(190, 190, 50, 50));leftButton->setFont(font);num1Button = new QPushButton(this);num1Button->setText("1");num1Button->setGeometry(QRect(10, 70, 50, 50));num1Button->setFont(font);cancelButton = new QPushButton(this);cancelButton->setText("Esc");cancelButton->setGeometry(QRect(190, 70, 110, 50));cancelButton->setFont(font1);rightButton = new QPushButton(this);rightButton->setText("->");rightButton->setGeometry(QRect(250, 190, 50, 50));rightButton->setFont(font);num9Button = new QPushButton(this);num9Button->setText("9");num9Button->setGeometry(QRect(130, 190, 50, 50));num9Button->setFont(font);num8Button = new QPushButton(this);num8Button->setText("8");num8Button->setGeometry(QRect(70, 190, 50, 50));num8Button->setFont(font);num2Button = new QPushButton(this);num2Button->setText("2");num2Button->setGeometry(QRect(70, 70, 50, 50));num2Button->setFont(font);num7Button = new QPushButton(this);num7Button->setText("7");num7Button->setGeometry(QRect(10, 190, 50, 50));num7Button->setFont(font);dotButton = new QPushButton(this);dotButton->setText(".");dotButton->setGeometry(QRect(130, 250, 50, 50));dotButton->setFont(font);num3Button = new QPushButton(this);num3Button->setText("3");num3Button->setGeometry(QRect(130, 70, 50, 50));num3Button->setFont(font);num0Button = new QPushButton(this);num0Button->setText("0");num0Button->setGeometry(QRect(10, 250, 50, 50));num0Button->setFont(font);num5Button = new QPushButton(this);num5Button->setText("5");num5Button->setGeometry(QRect(70, 130, 50, 50));num5Button->setFont(font);signButton = new QPushButton(this);signButton->setText("+/-");signButton->setGeometry(QRect(70, 250, 50, 50));QFont font2;font2.setPointSize(20);signButton->setFont(font2);lineEdit = new QLineEdit(this);lineEdit->setGeometry(QRect(10, 10, 290, 50));QFont font3;font3.setPointSize(24);font3.setWeight(50);lineEdit->setFont(font3);lineEdit->setText(QString());

相應(yīng)的槽函數(shù)功能

void NumKeyboard::changeEvent(QEvent *e) {QDialog::changeEvent(e);switch (e->type()) {case QEvent::LanguageChange:break;default:break;} }bool NumKeyboard::eventFilter(QObject *obj, QEvent *event) {if (event->type() == QEvent::KeyPress){QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);if (obj == lineEdit){if(keyEvent->key() >= 0x20 && keyEvent->key()<= 0x0ff) return true;elsereturn false;}else{return false;}}else{// standard event processingreturn QObject::eventFilter(obj, event);} }//***********************按鍵*****************************// void NumKeyboard::on_num1Button_clicked() //1 {int idx = lineEdit->cursorPosition(); if(strContent.left(idx) == "0") {lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '1'); lineEdit->setText(strContent); lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); qDebug()<<"strContent"<<strContent;qDebug()<<"idx"<<idx; }void NumKeyboard::on_num2Button_clicked() //2 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '2');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num3Button_clicked() //3 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '3');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num4Button_clicked() //4 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '4');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num5Button_clicked() //5 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '5');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num6Button_clicked() //6 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '6');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num7Button_clicked() //7 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '7');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num8Button_clicked() //8 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '8');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num9Button_clicked() //9 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0"){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '9');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_dotButton_clicked() //. {int idx = lineEdit->cursorPosition();if(idx==0 || strContent.contains('.')){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '.');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_num0Button_clicked() //0 {int idx = lineEdit->cursorPosition();if(strContent.left(idx) == "0" || (idx==0 &&strContent!="")){lineEdit->setCursorPosition(idx);qDebug()<<"idx"<<idx;lineEdit->setFocus();return;}strContent.insert(idx, '0');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_signButton_clicked() //+/- {int idx = lineEdit->cursorPosition();if(strContent.left(1) == "-"){strContent.remove(0, 1);lineEdit->setText(strContent);lineEdit->setCursorPosition(idx-1);lineEdit->setFocus();}else{if(strContent=="0" || strContent==""){lineEdit->setCursorPosition(idx);lineEdit->setFocus();}else{strContent.insert(0, '-');lineEdit->setText(strContent);lineEdit->setCursorPosition(idx+1);lineEdit->setFocus();}} }void NumKeyboard::on_leftButton_clicked() //left {int idx = lineEdit->cursorPosition();if(idx == 0){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}lineEdit->setCursorPosition(idx-1);lineEdit->setFocus(); }void NumKeyboard::on_rightButton_clicked() //right {int idx = lineEdit->cursorPosition();if(idx == strContent.length()) //返回此字符串的字符數(shù){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }void NumKeyboard::on_backspaceButton_clicked() //backspace {int idx = lineEdit->cursorPosition();if(idx == 0){lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.remove(idx-1,1);lineEdit->setText(strContent);lineEdit->setCursorPosition(idx-1);lineEdit->setFocus(); }void NumKeyboard::on_cancelButton_clicked() //cancel {this->close();valid = false; }void NumKeyboard::on_okButton_clicked() //ok {this->close();valid = true; }void NumKeyboard::setText(QString str) //設(shè)置文本內(nèi)容 {strContent = str;lineEdit->setText(strContent);lineEdit->setFocus(); }QString NumKeyboard::getText() //獲取內(nèi)容 {return strContent; }

上面的槽函數(shù)中只對大體的相似,只對不同處做出講解
以點擊“1”為例:
獲取在軟鍵盤中的文本框中光標(biāo)的位置,賦值給idx,索引用

int idx = lineEdit->cursorPosition();

官方的解釋如下
QString x = “Pineapple”;
QString y = x.left(4); // y == “Pine”
同理下面的代碼含義是:把當(dāng)前光標(biāo)位置左側(cè)所有的數(shù),存放在strContent中,
if判斷的作用是,當(dāng)數(shù)值開頭是0,便不能夠輸入。一個簡單的檢查的功能,例如無法輸入”01“

insert的官方解釋
QString str = “Meal”;
str.insert(1, QString(“ontr”));
// str == “Montreal”
下面語句的作用是在當(dāng)前的坐標(biāo)處出插入1;把新的字符串返回給strContent
(初始時idx=0,光標(biāo)位置是0)
strContent.insert(idx, ‘1’);
隨后設(shè)置當(dāng)前的光標(biāo)的位置+1,
lineEdit->setCursorPosition(idx+1);
顯示光標(biāo)
lineEdit->setFocus();

void NumKeyboard::on_num1Button_clicked() //1 {int idx = lineEdit->cursorPosition(); if(strContent.left(idx) == "0") {lineEdit->setCursorPosition(idx);lineEdit->setFocus();return;}strContent.insert(idx, '1'); lineEdit->setText(strContent); lineEdit->setCursorPosition(idx+1);lineEdit->setFocus(); }

在設(shè)置正負的時候還會用到 strContent.remove(0, 1);
官方的解釋是:
QString s = “Montreal”;
s.remove(1, 4);
// s == “Meal”
上面的含義是,在0的位置刪除1個字符。就是數(shù)字前面的+、-

在設(shè)置右移的槽函數(shù)中
idx == strContent.length()) //返回此字符串的字符數(shù)

最后通過getText() 函數(shù)獲取文本的內(nèi)容

QString NumKeyboard::getText() //獲取內(nèi)容
{
return strContent;
}

void SoftKeyLineEdit::mousePressEvent(QMouseEvent *e) {if(e->button() == Qt::LeftButton){numkeyboard->setText(this->text()); numkeyboard->exec();if(numkeyboard->valid){this->setText(numkeyboard->getText()); }} }

我們通過鼠標(biāo)點擊的方式來觸發(fā)軟鍵盤
下面的函數(shù)的作用是:把當(dāng)前的文本框中的內(nèi)容傳遞給軟件盤中的文本框
numkeyboard->setText(this->text());
下面的exec()與show()顯示的方式有所不同。
exec():
顯示一個模式對話框,并且鎖住程序直到用戶關(guān)閉該對話框為止。
show():
顯示一個非模式對話框??刂茩?quán)即刻返回給調(diào)用函數(shù)。
numkeyboard->exec();
如果點擊“確認(rèn)”按鍵后 valid返回值是true
if(numkeyboard->valid)

隨后把返回得到的字符串,傳遞到點擊處的文本框中。
this->setText(numkeyboard->getText());

如何快速一個上面的軟鍵盤到項目中
1.包含上面的cpp和.h文件
2.通過觸發(fā)的方式觸發(fā)下面語句
numkeyboard->setText(this->text());
numkeyboard->exec();
if(numkeyboard->valid)
{
this->setText(numkeyboard->getText());
}
3.觸發(fā)方式可以是信號(例如clicked())
另外看還可以是mousePressEvent(); 它的使用方式要重寫
細節(jié)(QString 定義的strContent存儲有引用計數(shù),指向相同的存儲空間,僅僅 是增加一個引用計數(shù))

效果圖

源代碼下載
http://download.csdn.net/detail/osean_li/9773460

總結(jié)

以上是生活随笔為你收集整理的Qt实战开发-数字软键盘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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