600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > QT LineEdit实现软键盘输入

QT LineEdit实现软键盘输入

时间:2024-05-23 19:43:21

相关推荐

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;}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上。后面解决。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。