QT实现数字键盘点击实时显示到聚焦的编辑控件

实现数字小键盘点击数字实时显示添加到聚焦的控价line_edit上
1.建立工程,在UI designer中建两个widget,找不到widget的可以通过侧边的搜索查找
在这里插入图片描述
拖拽两个widget至我们需要的界面中,然后在其中添加上lineedit/pushbutton
在这里插入图片描述
在这里插入图片描述
2.进行程序编写,主要是进行信号和槽函数的连接

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //清空按键
    connect(ui->pushButton_11, &QPushButton::clicked, [=](){
        if(ui->widget->focusWidget()!=nullptr)
        {
            QLineEdit *lineedit =  qobject_cast<QLineEdit*>(ui->widget->focusWidget());
            //获取当前ui中widget聚焦的哪个line_edit
            if(lineedit)
                lineedit->clear();
        }
    });
    //0-9 按钮
    for(auto btn:ui->widget_2->findChildren<QPushButton*>())
    {//查找widget_2中所有按键 逐个绑定槽函数
        if(ui->pushButton_11 == btn)//跳过清除按键
            continue;
        connect(btn, &QPushButton::clicked, [=](){
            if(ui->widget->focusWidget()!=nullptr)
            {
                QLineEdit *lineedit =  qobject_cast<QLineEdit*>(ui->widget->focusWidget());
                if(lineedit)
                {//将按键上的字符模拟键盘形式发送至聚焦的line_edit
                    QString text = btn->text();
                    QChar c = text.at(0);
                    int num = c.unicode();
                    QKeyEvent evt(QEvent::KeyPress,num,Qt::KeyboardModifier::NoModifier,text);
                    qApp->sendEvent(lineedit,&evt);
                }
            }
        });
    }
}

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

简要说明一下为什么要建立两个widget?
1.为了区分控件区域
2.因为代码中我们用到了focusWidget(),这个定位聚焦的控件的函数只能定位到当前widget中聚焦的控件,若不进行划分,则在你点击小键盘的button时聚焦就会改变
参考链接:https://blog.csdn.net/hss2799/article/details/111628159


版权声明:本文为weixin_43882507原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。