描述:当光标选中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;}elsereturn 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;}elsereturn false;}....elsereturn 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上。后面解决。