如何在关闭包含 QTextEdit 的子 QDialog 后禁用 Android 虚拟键盘显示?

问题描述 投票:0回答:1

我正在开发一个安卓程序。我正在尝试显示一个包含 QTextEdit 输入字段的子窗口,必须使用虚拟键盘在其中输入文本。此步骤工作正常 - 当输入字段获得焦点时,虚拟键盘将显示并用向下箭头关闭。使用“后退”按钮关闭子对话框后,虚拟键盘再次显示在父窗口顶部。

这是一个复制问题的简化示例。

这是父窗口的代码:

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    QVBoxLayout * mainLayout = new QVBoxLayout;
    this->setLayout(mainLayout);

    QPushButton * pTextDlgButton = new QPushButton("Text dlg",this);
    connect(pTextDlgButton , SIGNAL(clicked()) , this , SLOT(OnTextDlgPress()));
    mainLayout->addWidget(pTextDlgButton);
}

Dialog::~Dialog() {}


void Dialog::OnTextDlgPress()
{
    QTextDlg dlg;
    dlg.exec();
}

这是子窗口的代码:

QTextDlg::QTextDlg()
{
    QVBoxLayout * mainLayout = new QVBoxLayout;
    this->setLayout(mainLayout);

    QTextEdit * pTextEdit=new QTextEdit();

    mainLayout->addWidget(pTextEdit);
}

我尝试将焦点转移到子对话框析构函数中的另一个元素。我尝试在 exec()

qApp->inputMethod()->hide()
之后显式关闭键盘。我尝试覆盖“后退”按钮单击处理程序。

android qt keyboard textfield
1个回答
0
投票

以下事件处理程序帮助了我:

bool Dialog::event(QEvent *event)
{
    if(event->type()==QEvent::KeyPress)
    {
        if(((QKeyEvent *)event)->key() == Qt::Key_Back)
        {
            accept();
            return true;
        }
    }

    if(event->type()==QEvent::KeyPress)
        if(((QKeyEvent *)event)->key() == Qt::Key_Return)
        {
            return true;
        }

    return QDialog::event(event);
}
© www.soinside.com 2019 - 2024. All rights reserved.