我正在开发一个安卓程序。我正在尝试显示一个包含 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()
之后显式关闭键盘。我尝试覆盖“后退”按钮单击处理程序。
以下事件处理程序帮助了我:
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);
}