Qt QLineEdit自定义数字键盘

1.继承QlineEdit重写void mousePressEvent(QMouseEvent *event);事件。

头文件

#ifndef MY_LINEEDIT_H
#define MY_LINEEDIT_H
#include <QWidget>
#include <QLineEdit>
 
class My_lineEdit : public QLineEdit
{
    Q_OBJECT
public:
    My_lineEdit(QWidget *parent = 0);
 
protected:
    void mousePressEvent(QMouseEvent *event);
 
signals:
    void send_show(QString data);//建议:此处的参数可以添加一个对象名称
 
};
 
#endif // MY_LINEEDIT_H

cpp文件

#include "my_lineedit.h"
 
My_lineEdit::My_lineEdit(QWidget *parent) :
    QLineEdit(parent)
{
    this->setText("");
}
 
void My_lineEdit::mousePressEvent(QMouseEvent *event)
{
    emit send_show(this->text());
    QLineEdit::mousePressEvent(event);
}

2.添加myKeyBoardDialog界面类

h文件

#ifndef MYKEYBOARDDIALOG_H
#define MYKEYBOARDDIALOG_H

#include <QDialog>

namespace Ui {
class myKeyBoardDialog;
}

class myKeyBoardDialog : public QDialog
{
    Q_OBJECT

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

private slots:
    void on_okBtn_clicked();


    void on_btn0_clicked();

    void on_btn1_clicked();

    void on_btn2_clicked();

    void on_btn3_clicked();

    void on_btn4_clicked();

    void on_btn5_clicked();

    void on_btn6_clicked();

    void on_btn7_clicked();

    void on_btn8_clicked();

    void on_btn9_clicked();

    void on_btnDot_clicked();

    void on_btnDel_clicked();

signals:
    void sendKeyBoardUIDataToLineEdit(QString);

private:
    Ui::myKeyBoardDialog *ui;

};

#endif // MYKEYBOARDDIALOG_H

 cpp文件

#include "mykeyboarddialog.h"
#include "ui_mykeyboarddialog.h"

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

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

void myKeyBoardDialog::on_okBtn_clicked()
{
    //传递数据至lineEdit
    emit sendKeyBoardUIDataToLineEdit(ui->lineEdit->text());
    this->close();
}

void myKeyBoardDialog::on_btn0_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"0");
}

void myKeyBoardDialog::on_btn1_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"1");
}

void myKeyBoardDialog::on_btn2_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"2");
}

void myKeyBoardDialog::on_btn3_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"3");
}

void myKeyBoardDialog::on_btn4_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"4");
}

void myKeyBoardDialog::on_btn5_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"5");
}

void myKeyBoardDialog::on_btn6_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"6");
}

void myKeyBoardDialog::on_btn7_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"7");
}

void myKeyBoardDialog::on_btn8_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"8");
}

void myKeyBoardDialog::on_btn9_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+"9");
}

void myKeyBoardDialog::on_btnDot_clicked()
{
    ui->lineEdit->setText(ui->lineEdit->text()+".");
}

void myKeyBoardDialog::on_btnDel_clicked()
{
    QString text = ui->lineEdit->text();
    ui->lineEdit->setText(text.remove(text.length()-1,1));
}

3.mainwindow添加lineEdit控件并提升为My_lineEdit

h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"mykeyboarddialog.h"
#include"my_lineedit.h"
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void show_numberkeyboard_ui(QString data);     //显示键盘
    void confirmString(QString gemfield);           //接收键盘发过来的数据
private:
    Ui::MainWindow *ui;
    myKeyBoardDialog *numberkeyboard;
    QKeyEvent *event;
};

#endif // MAINWINDOW_H

cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    numberkeyboard = new myKeyBoardDialog();
//将所有lineedit信号都和软件盘界面显示关联
    connect(ui->lineEdit,SIGNAL(send_show(QString)),this,SLOT(show_numberkeyboard_ui(QString)));

    connect(numberkeyboard,SIGNAL(sendKeyBoardUIDataToLineEdit(QString)),this,SLOT(confirmString(QString)));
}

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

void MainWindow::show_numberkeyboard_ui(QString str)
{
    ui->lineEdit->setText(str);
    numberkeyboard->exec();

}

void MainWindow::confirmString(QString gemfield)
{
    ui->lineEdit->setText(gemfield);
}

4.截图

 

 

1-2.也可以通过 过滤 MousePressEvent 事件来完成 点击 QLineEdit 调用软键盘

bool eventFilter(QObject *watched, QEvent *event);

void callKeyBoard();
 ui->lineEdit_kv->installEventFilter(this) ;
//  事件过滤器函数重写 
bool init::eventFilter(QObject *watched, QEvent *event)
{
    if ( (watched == ui->lineEdit_kv) && (event->type() == QEvent::MouseButtonPress) )
    {
        callKeyBoard();
    }
    return QWidget::eventFilter(watched,event);
}

// 调用软键盘 
void init::callKeyBoard()
{
    ui->widget_bort->show() ;
}

5.源码链接

https://download.csdn.net/download/weixin_41882459/12728524

 

6.建议:

a.如果窗体中有多个lineEdit,可以在My_lineEdit文件的send_show中的参数中增加this->objectName,在对应的槽函数中获取对象名称,在confirmString显示函数中,如下操作

this->findChild<QLineEdit *>(this->objectName)->setText(text);

样式设置

QPushButton { 
background: #4395ff;
border-radius: 5px;
margin: 5px; 
font-size: 26px; 
color: white;
} 
QPushButton:pressed { background: #01ddfd }
QPushButton:hover{background:#01EEFF}
QLineEdit 
{
border-style: none;        
padding: 3px;             
border-radius: 5px;        
border: 1px solid #dce5ec; 
font-size: 30px;          
}                              

 

b.建议居中显示

c.建议单例模式

d.dialog的边框需要去掉,窗体的样式需要自己去调整。

 

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
QLineEditQt中增强版的文本输入框,可以用来输入任意类型的数据。但是,在输入数字时,常常需要使用数字键盘而不是全键盘。 可以通过自定义数字键盘来实现这个功能。具体实现方式如下: 在Qt中,可以使用QDialog来实现自定义数字键盘。首先,我们需要创建一个继承自QDialog的数字键盘界面。可以使用Qt Designer来设计界面。界面元素可以包括数字键和一个清除按钮等。 由于数字键盘是一个模态对话框,需要在需要数字输入的时候弹出,如果是在QLineEdit中使用数字键盘,可以在QLineEdit的textChanged信号中打开数字键盘数字键盘中的按钮被点击时,会触发对应的事件,可以通过为按钮设置QSignalMapper(Qt信号映射器)来简化信号槽的连接。QSignalMapper将所有的按钮点击事件映射为一个槽函数,并将点击的按钮作为参数传递给槽函数。 如果输入完成,用户可以点击清除按钮关闭数字键盘。 最后,我们可以将输入的数字传递给QLineEdit,有两种方式: 一种方式是通过信号和槽来传递数字,即在数字键盘中输入数字后,通过自定义的信号将数字传递给父窗口控件,然后在父窗口控件的槽函数中将数字显示在QLineEdit中。 另一种方式是在数字键盘中直接获取QLineEdit对象,并在数字键盘中将输入的数字写入QLineEdit中。 总的来说,实现自定义数字键盘的过程并不复杂,可以通过设计简单的界面和信号槽连接来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fyzy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值