如何用qt实现虚拟数字小键盘

先上效果图

在这里插入图片描述

//main.cpp
#include <QApplication>
#include "./mainpage.h"
#include "./keyboard.h"

int main(int argc, char **args)
{
    // 创建对象
    QApplication *app = new QApplication(argc, args);
    MainPage *mainpage = new MainPage();

    // 安装事件过滤器
    app->installEventFilter(mainpage);

    // 显示界面
    mainpage->show();
    return app->exec();
}
//mainpage.cpp
#include "mainpage.h"
#include "ui_mainpage.h"

MainPage::MainPage(QWidget *parent)
    : QWidget(parent), ui(new Ui::MainPage)
{
    ui->setupUi(this);

    ui->spinBox_1->setRange(0, 9999999);
    ui->spinBox_2->setRange(0, 9999999);

    // 打开键盘
    connect(ui->pushButton_openKeyboard, &QPushButton::clicked, this,
            [=]()
            {
                m_keyboard.show();
            });
}

MainPage::~MainPage()
{
    delete ui;
}

bool MainPage::eventFilter(QObject *obj, QEvent *e)
{
    if (e->type() == QEvent::FocusIn)
    {
        if (obj == ui->spinBox_1)
        {
            SELECTED_SPINBOX = ui->spinBox_1;
            printf("1\n");
        }
        else if (obj == ui->spinBox_2)
        {
            SELECTED_SPINBOX = ui->spinBox_2;
            printf("2\n");
        }
    }
    return QObject::eventFilter(obj, e);
}

//mainpage.h
#ifndef MAINPAGE_H
#define MAINPAGE_H

#include <QWidget>
#include "./keyboard.h"

namespace Ui
{
    class MainPage;
}

class MainPage : public QWidget
{
    Q_OBJECT

public:
    explicit MainPage(QWidget *parent = nullptr);
    ~MainPage();

    bool eventFilter(QObject *obj, QEvent *e) override;

private:
    Ui::MainPage *ui;
    Keyboard m_keyboard;
};

#endif // MAINPAGE_H

//keyboard.cpp
#include "keyboard.h"
#include "ui_keyboard.h"

QSpinBox *SELECTED_SPINBOX;

Keyboard::Keyboard(QWidget *parent)
    : QWidget(parent), ui(new Ui::Keyboard)
{
    ui->setupUi(this);

    // 窗口总在最前
    this->setWindowFlag(Qt::WindowStaysOnTopHint);

    connect(ui->pushButton_0, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_1, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_2, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_3, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_4, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_5, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_6, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_7, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_8, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_9, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_point, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_backSpace, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
    connect(ui->pushButton_confirm, &QPushButton::clicked, this, &Keyboard::ButtonClickedHandler);
}

Keyboard::~Keyboard()
{
    delete ui;
}

void Keyboard::ButtonClickedHandler()
{
    QString senderName = ((QPushButton *)sender())->text();

    if (SELECTED_SPINBOX == NULL)
        return;
    if (senderName == "退格")
    {
        int value = SELECTED_SPINBOX->value();
        value /= 10;
        SELECTED_SPINBOX->setValue(value);
    }
    else if (senderName == "确定")
    {
        this->close();
    }
    else if (senderName == ".")
    {
    }
    else
    {
        int value = SELECTED_SPINBOX->value();
        value *= 10;
        value += senderName.toInt();
        SELECTED_SPINBOX->setValue(value);
    }
}

//keyboard.h
#ifndef KEYBOARD_H
#define KEYBOARD_H

#include <QWidget>
#include <QSpinBox>

extern QSpinBox* SELECTED_SPINBOX;

namespace Ui {
class Keyboard;
}

class Keyboard : public QWidget
{
    Q_OBJECT

public:
    explicit Keyboard(QWidget *parent = nullptr);
    ~Keyboard();

    void ButtonClickedHandler();//按钮按下处理函数

private:
    Ui::Keyboard *ui;
};

#endif // KEYBOARD_H

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: QT九宫格数字虚拟键盘是一种常见的虚拟键盘布局,通常用于触摸屏设备上。它由一个3x3的方格组成,每个方格代表一个数字键。用户可以通过选择方格来输入数字。 在QT中,可以使用QGridLayout布局管理器来创建九宫格数字虚拟键盘。首先,我们需要创建一个QWidget作为键盘的父容器,并设置其布局为QGridLayout。接下来,创建9个QPushButton作为数字键,并将它们依次添加到布局中。 为了让用户能够输入数字,我们需要连接每个按钮的clicked信号到一个槽函数中。在槽函数中,我们可以使用QPushButton的text()函数获得被点击的按钮上的数字,并将其输出到所需的地方(比如文本框)。 除了数字键,通常还会包括一些特殊功能键,比如删除键和确定键。我们可以在布局中添加这些功能键,并为它们设置相应的槽函数来处理用户的操作。 在虚拟键盘上显示输入的数字通常需要一个文本框或标签来显示。我们可以使用QLineEdit或QLabel来实现这个功能。在槽函数中,将获取的数字添加到文本框或标签的文本中,以实时显示用户的输入。 最后,在程序中需要适当地设置虚拟键盘的大小和位置,以确保它能够在合适的位置进行显示,并能够被用户方便地使用。 总之,QT九宫格数字虚拟键盘是一种常见的输入方式,可以方便地在触摸屏设备上输入数字。通过使用QT的布局管理器和按钮组件,我们可以轻松创建这样一个虚拟键盘,并使其能够与其他组件进行交互,实现数字的输入和显示。 ### 回答2: Qt 九宫格数字虚拟键盘是基于Qt框架开发的一种虚拟键盘,用于在数字输入场景下提供更友好的用户界面。 该虚拟键盘的特点是使用九宫格布局,每个数字都对应一个按钮,用户可以通过点击按钮来输入数字。九宫格布局是指将数字按照3x3的矩阵排列,每个数字占据一个格子。这样的布局方式可以很好地适应不同尺寸的屏幕,同时也便于用户进行输入。 Qt提供了便捷的UI控件和事件处理机制,可以很方便地实现九宫格数字虚拟键盘。开发者可以使用Qt提供的按钮控件来创建数字按钮,并为每个按钮绑定相应的事件处理函数。当用户点击按钮时,事件处理函数负责获取按钮对应的数字,并在输入框中显示出来。 除了数字按钮,该九宫格虚拟键盘还可以包含一些特殊按钮,比如清除按钮、删除按钮和确认按钮。清除按钮用于清空输入框中的内容,删除按钮用于删除输入框中的最后一个数字,确认按钮用于确认当前输入的数字。这些特殊按钮也需要绑定相应的事件处理函数,以实现对输入状态的控制。 总之,Qt九宫格数字虚拟键盘是一种基于Qt框架开发的方便实用的输入工具,适用于数字输入场景,可以提高用户的输入效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值