QT5_虚拟键盘

 有的时候设计的是触摸界面,需要虚拟键盘。QT5里面自带了一个虚拟键盘,但总是用不明白。自己写了一个,开源出来,分享给大家。声明一个对象就可以直接用了

keyboard.h

//为了让点击右效果显示,设置了样式表的切换。自己用的时候可以根据情况修改
#ifndef KEYBOARD_H
#define KEYBOARD_H

#include <QDialog>
#include <QLineEdit>

namespace Ui {
    
    
class KeyBoard;
}

class KeyBoard : public QDialog
{
    
    
    Q_OBJECT

public:
    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_H

keyboard.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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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;}");
    //使用等待效果,让图标变换有显示
    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文件代码没用,直接用图形化的方式生成的,把整体效果,和空间命名贴出来了:
  整体效果图如下:
在这里插入图片描述
  控件命名结构如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/gls_nuaa/article/details/111827489