首页 > 解决方案 > 虚拟键盘隐藏在 focusEvent 上

问题描述

我有一个 Qt 项目,该项目在具有默认虚拟键盘的平板电脑上运行。

所以,我有一个QLineEdit ssoEdit;我安装了一个事件过滤器。

   ssoEdit = new QLineEdit(twoFAPage);
   ssoEdit->setStyleSheet(editStyleSheet);
   ssoEdit->setObjectName("ssoEdit");
   ssoEdit->installEventFilter(this);

在事件过滤器中,我有一个if声明要检查QEvent::focusInwatchedObject成为我的lineEdit. 如果为真,我会更改lineEdit几何图形以将其移得更高。

bool TemplateObject::eventFilter(QObject *watched, QEvent *event){



    if(event->type()==QEvent::FocusIn && watched->objectName()=="ssoEdit")
    {
        int x,y,w,h;


        ssoLabel->geometry().getRect(&x,&y,&w,&h);
        ssoLabel->setGeometry(QRect(x,y-100,w,h));

        ssoEdit->geometry().getRect(&x,&y,&w,&h);
        ssoEdit->setGeometry(QRect(x,y-100,w,h));



    }



    return false;
}

当我按下 时ssoEdit,事件被触发并且ssoEdit被移动得更高,但虚拟键盘没有出现(虽然光标出现在 中ssoEdit)。如果我再按ssoEdit一次,键盘就会出现。

我正在寻找键盘在ssoEdit第一次按下并向上移动时显示并保持不变。

我不知道该尝试什么。有什么办法可以强制键盘出现吗?我不得不提到我不能使用 QML 文件。只是 C++。

如有必要,我稍后会更新代码。

标签: c++qt

解决方案


当我找到解决方案时,我将结束这个问题。有一种方法可以返回指向默认键盘的指针,然后我可以在该指针上调用 show()。该方法在项目提供的 sdk 上可用。


推荐阅读