为啥虚拟键盘不适用于 Qt 中的 QDialog 文本框?
Posted
技术标签:
【中文标题】为啥虚拟键盘不适用于 Qt 中的 QDialog 文本框?【英文标题】:Why virtual keyboard does not work with QDialog textbox in Qt?为什么虚拟键盘不适用于 Qt 中的 QDialog 文本框? 【发布时间】:2016-06-15 04:32:26 【问题描述】:我为无键盘设备制作了一个应用程序。 我将thisRef 用作键盘作为虚拟键盘。 我的项目中有一个对话框,其中有两个文本框(一个用于输入用户名,另一个用于输入密码),带有两个按钮:确定和取消。构建项目并运行后,按菜单按钮显示菜单形式,然后出现对话框以检查用户身份验证。用户应在虚拟键盘的文本框中输入数据。 出现虚拟键盘(thisRef 中的输入面板),但按钮不起作用。 当我搜索时,我看到了这个"sounds like you are trying to open another window from the dialog - this is your error. Of course the dialog will stay on top - that is its job." 因为对话框是模态的,所以虚拟键盘被禁用 无论如何编辑对话框或键盘以在模式小部件中工作?
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include "myinputpanelcontext.h"
int main(int argc, char *argv[])
QApplication a(argc, argv);
MyInputPanelContext *ic= new MyInputPanelContext; ;
a.setInputContext(ic);
MainWindow w;
//w.show();
w.showFullScreen();
w.centralWidget()->releaseKeyboard();
return a.exec();
MainWindow.cpp:
MyDialog *d=new MyDialog(this);
d.exec();
【问题讨论】:
听起来像焦点问题。但请在问题中提供更好的问题描述,因此无需外部链接即可回答。尝试创建MVCE 来隔离问题。 它解决了: 1. 模态对话框由 exec() 启动,它们在嵌套事件循环运行时阻塞程序流。 2. 无模式对话框由show() 启动,不会阻塞程序流程。 投票重新打开,因为虚拟键盘存在特定问题,这里有解决方案。 【参考方案1】:解决了:
模态对话框由 exec() 启动,它们在嵌套事件循环运行时阻塞程序流。 无模式对话框由 show() 启动,它们不会阻塞程序流程。
来自http://www.qtforum.org/article/14285/modeless-dialog.html 我使用此代码:
MyDialog *d=new MyDialog(this);
d->show();
d->raise();
q->activewindows();
代替这段代码:
MyDialog *d=new MyDialog(this);
d.exec();
作为文档参考:
无模式对话框:void EditorWindow::find()
if (!findDialog)
> findDialog = new FindDialog(this);
> connect(findDialog, SIGNAL(findNext()), this, SLOT(findNext()));
> findDialog->show();
> findDialog->raise();
> findDialog->activateWindow();
来自here
【讨论】:
以上是关于为啥虚拟键盘不适用于 Qt 中的 QDialog 文本框?的主要内容,如果未能解决你的问题,请参考以下文章
Qt 4.8.4 Release 版本不适用于 Windows 7 64 位