实现数字小键盘点击数字实时显示添加到聚焦的控价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版权协议,转载请附上原文出处链接和本声明。