QT LineEdit实现软键盘输入

描述:当光标选中LineEdit时弹出软键盘并且点击键盘能将内容输入到LineEdit中

  • 首先我们先实现选中LineEdit时键盘能弹出

给LineEdit安装事件过滤器,重写mousePressEvent事件
MainWindow.h

public:
input_key *b = new input_key;    //声明弹出窗口的对象
virtual bool eventFilter(QObject *obj, QEvent *event);

MainWindow.cpp

ui->show_password->installEventFilter(this);

函数实现

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
     if(obj == ui->show_password)
    {
        if(event->type() == QEvent::MouseButtonPress)  
        b->show();
     }
     return QWidget::eventFilter(obj,event);
   }
  • 其次实现点击键盘能显示到LineEdit中

这个涉及两个窗口之间通信,必须要自定义信号。
input_key.h

public:
     QString  str;
signals:
    void    send_num( QString &str); //自定义信号

input_key.cpp

input_key::input_key(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::input_key)
{
    str = " ";
    ui->setupUi(this);
    ui->rb_one->installEventFilter(this);
    ui->rb_two->installEventFilter(this);
}

bool input_key::eventFilter(QObject *obj, QEvent *event)
{
    if(obj == ui->rb_one)
    {
        if(event->type() == QEvent::FocusIn)
        {
            str.append( ui->rb_one->text());
            ui->rb_one->clearFocus();  
            emit  send_num(str);
            return true;
        }
        else
            return false;
    }
    else if(obj == ui->rb_two)
    {
        if(event->type() == QEvent::FocusIn)
        {
            str.append( ui->rb_two->text());
            ui->rb_two->clearFocus();
            emit  send_num(str);
            return true;
        }
        else
            return false;
    }
    ....
    
    else
        return input_key::eventFilter(obj, event);
    
}
 


MainWindow.h

public slots:
         void receiver_num( QString &);

MainWindow.cpp

connect(b,SIGNAL(send_num(QString &)),this,SLOT(receiver_num(QString &)));
   
void MainWindow::receiver_num(QString &num)
{
     ui->show_password->setText(num);
}

运行结果:
在这里插入图片描述
不过还有一个小Bug,当你选中下一个lineEdit输入时,它会将你前面的字符串也会输到下一个lineEdit上。后面解决。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值