QT5_虚拟键盘
?有的時(shí)候設(shè)計(jì)的是觸摸界面,需要虛擬鍵盤。QT5里面自帶了一個(gè)虛擬鍵盤,但總是用不明白。自己寫了一個(gè),開源出來(lái),分享給大家。聲明一個(gè)對(duì)象就可以直接用了
keyboard.h
//為了讓點(diǎn)擊右效果顯示,設(shè)置了樣式表的切換。自己用的時(shí)候可以根據(jù)情況修改 #ifndef KEYBOARD_H #define KEYBOARD_H#include <QDialog> #include <QLineEdit>namespace Ui { class KeyBoard; }class KeyBoard : public QDialog {Q_OBJECTpublic:explicit KeyBoard(QWidget *parent = nullptr);~KeyBoard();void setLineEditObj(QLineEdit* lineEdit);QLineEdit* edit; private:Ui::KeyBoard *ui; private slots:void key_0Pressed();void key_1Pressed();void key_2Pressed();void key_3Pressed();void key_4Pressed();void key_5Pressed();void key_6Pressed();void key_7Pressed();void key_8Pressed();void key_9Pressed();void key_DotPressed();void key_BackPressed();void key_EnterPressed(); };#endif // KEYBOARD_Hkeyboard.cpp
#include "keyboard.h" #include "ui_keyboard.h" #include <QTime>KeyBoard::KeyBoard(QWidget *parent) :QDialog(parent),ui(new Ui::KeyBoard) {ui->setupUi(this);this->setWindowTitle("");this->edit = nullptr;//初始化把edit清空//this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);this->setWindowFlags(Qt::WindowStaysOnTopHint);edit = new QLineEdit();connect(this->ui->P_key0, &QPushButton::clicked, this, &KeyBoard::key_0Pressed);connect(this->ui->P_key1, &QPushButton::clicked, this, &KeyBoard::key_1Pressed);connect(this->ui->P_key2, &QPushButton::clicked, this, &KeyBoard::key_2Pressed);connect(this->ui->P_key3, &QPushButton::clicked, this, &KeyBoard::key_3Pressed);connect(this->ui->P_key4, &QPushButton::clicked, this, &KeyBoard::key_4Pressed);connect(this->ui->P_key5, &QPushButton::clicked, this, &KeyBoard::key_5Pressed);connect(this->ui->P_key6, &QPushButton::clicked, this, &KeyBoard::key_6Pressed);connect(this->ui->P_key7, &QPushButton::clicked, this, &KeyBoard::key_7Pressed);connect(this->ui->P_key8, &QPushButton::clicked, this, &KeyBoard::key_8Pressed);connect(this->ui->P_key9, &QPushButton::clicked, this, &KeyBoard::key_9Pressed);connect(this->ui->P_dot, &QPushButton::clicked, this, &KeyBoard::key_DotPressed);connect(this->ui->P_back, &QPushButton::clicked, this, &KeyBoard::key_BackPressed);connect(this->ui->P_sure, &QPushButton::clicked, this, &KeyBoard::key_EnterPressed); }KeyBoard::~KeyBoard() {delete ui; }void KeyBoard::key_0Pressed() {this->ui->P_key0->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "0");this->ui->P_key0->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}");}void KeyBoard::setLineEditObj(QLineEdit* lineEdit) {this->edit = lineEdit; }void KeyBoard::key_1Pressed() {this->ui->P_key1->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "1");this->ui->P_key1->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_2Pressed() {this->ui->P_key2->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "2");this->ui->P_key2->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_3Pressed() {this->ui->P_key3->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "3");this->ui->P_key3->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_4Pressed() {this->ui->P_key4->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "4");this->ui->P_key4->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_5Pressed() {this->ui->P_key5->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "5");this->ui->P_key5->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_6Pressed() {this->ui->P_key6->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "6");this->ui->P_key6->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_7Pressed() {this->ui->P_key7->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "7");this->ui->P_key7->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_8Pressed() {this->ui->P_key8->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "8");this->ui->P_key8->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_9Pressed() {this->ui->P_key9->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + "9");this->ui->P_key9->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_DotPressed() {this->ui->P_dot->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text() + ".");this->ui->P_dot->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}"); }void KeyBoard::key_BackPressed() {this->ui->P_back->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 10pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->ui->D_lineEdit->setText(this->ui->D_lineEdit->text().left(this->ui->D_lineEdit->text().length() - 1 > 0 ? this->ui->D_lineEdit->text().length() - 1 : 0));this->ui->P_back->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 75 15pt Arial;}");}void KeyBoard::key_EnterPressed() {this->ui->P_sure->setStyleSheet("QPushButton{border-image: url(:/tubiao/14.png);color: rgb(255, 255, 255);font: 75 15pt Arial;}");//使用等待效果,讓圖標(biāo)變換有顯示QTime dieTime= QTime::currentTime().addMSecs(300);while (QTime::currentTime() < dieTime)QCoreApplication::processEvents(QEventLoop::AllEvents, 100);this->edit->setText(this->ui->D_lineEdit->text());this->ui->D_lineEdit->clear();//this->edit = nullptr;this->close();this->ui->P_sure->setStyleSheet("QPushButton{border-image: url(:/tubiao/10.png);color: rgb(255, 255, 255);font: 10pt Arial;}");}keyboard.ui
??ui文件代碼沒(méi)用,直接用圖形化的方式生成的,把整體效果,和空間命名貼出來(lái)了:
??整體效果圖如下:
??控件命名結(jié)構(gòu)如下:
總結(jié)
- 上一篇: C/C++下载文件_上传文件
- 下一篇: 十一、伪指令、数据类型、操作符