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