Qt 实现虚拟键盘

利用重写LineEdit 然后监听鼠标点击事件,根据LineEdit 的选择控制是数字键盘还是英文数字混合键盘。

 

 

 

实现方式非常的简单

只需要遍历所有的按键然后绑定槽函数

void keyboardNumDialog::init()
{

//    this->setWindowFlags(Qt::FramelessWindowHint);
//    this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
     setWindowModality(Qt::WindowModal);//半阻塞模式
    QList<QPushButton *> btn = this->findChildren<QPushButton *>();
    foreach (QPushButton * b, btn) {
        connect(b, SIGNAL(clicked()), this, SLOT(btn_clicked()));
    }

}

 特殊按键单独处理,如果是数值直接将显示的内容添加到编辑框上就行了

void keyboardNumDialog::btn_clicked()
{
    QPushButton *btn = (QPushButton *)sender();

    if(btn == ui->pb_close){
        this->reject();
        return ;
    }
    if(btn == ui->pb_enter)
    {
        this->accept();
        return ;
    }
    if(btn == ui->pb_delete)
    {
        delOneValue();
        return ;
    }
    QString objectName = btn->text();
    addChar(objectName);
}

 

LineEdit部分

继承这个控件然后重写鼠标松开事件

然后再界面上提升控件 就可以了

直接监听鼠标单击事件(这样把自己坑了,监听鼠标事件不能监听按下事件要监听松开事件,因为按下以后需要和松开同步使用的,这样操作会导致第一次点击输入法无效)

因为数字输入操作比较频繁,这里改成单例

void LineEditInput::mouseReleaseEvent(QMouseEvent * )
{
     qDebug()<<this->inputMethodHints()<<" ";
    if(this->inputMethodHints() == Qt::ImhPreferNumbers)
    {
        keyboardNumDialog *input = keyboardNumDialog::GetInstance();
        input->setInputType(QLineEdit::Normal);
        input->initValue(this->text());
//        keyboardNumDialog *input = bn(this->text());

        if(input->exec() == QDialog::Accepted)
        {
            this->setText(input->getValue());
        }
        else
        {

        }
        input->close();

    }
    else if(this->inputMethodHints() == Qt::ImhHiddenText)
    {
        keyboardEnDialog input(this->text());
        if(input.exec() == QDialog::Accepted)
        {
            this->setText(input.getValue());
        }
        else
        {

        }
    }
    else if(this->echoMode() == QLineEdit::Password)
    {
        keyboardNumDialog *input = keyboardNumDialog::GetInstance();
        input->initValue(this->text());
        input->setInputType(QLineEdit::Password);
//        keyboardNumDialog *input = bn(this->text());

        if(input->exec() == QDialog::Accepted)
        {
            this->setText(input->getValue());
        }
        else
        {

        }
        input->close();
    }
    else
    {
//        ErrorMessage(tr("Error"),tr("未设置输入类型"));
    }
}

然后就可以通过Qt Creator UI编辑器中的

通过选择这两个的其中一个就可以切换数字键盘或者是英文键盘了

 

 

https://download.csdn.net/download/weixin_42193704/12759297 完整工程下载链接

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值