Qt Android:当我在QLineEdit中输入时,虚拟键盘一直切换到大写
Qt Android: Virtual keyboard keeps switching to uppercase when I type in a QLineEdit
当我在QLineEdit中输入时,虚拟键盘以大写字母开头。即使我将它设置为小写,只要我键入一个字符,它就会返回到大写。也就是说,每次我输入一个字符,键盘就会再次重置为大写。
这种情况甚至发生在新创建的项目(我只是放了一个行编辑并运行它)。
我发现了一个关于同样问题的论坛帖子- https://groups.google.com/forum/#!topic/android-qt/QMFZmkACAIA.
我正在使用Qt/c++(不是QML)。
编辑:刚刚在一个新的QML项目上测试了它,错误也在那里。我还发现了一个关于QML的帖子- https://groups.google.com/forum/#!msg/android-qt/BzGDGoLNtYc/TdtOX9MW3vIJ。
Edit 2:我用inputmethodhint()进行了测试,唯一有效的是ImhNoAutoUppercase。但它仍然以一个大写字符开头,当按下后退键(删除最后一个字符)时,键盘将再次切换为大写字符,即使您已经键入了几个字母。在第一个字母之后,它会切换为小写,如果你不按后退键,它基本上可以正常工作。
Edit:一个比较好的解决方法是设置ImhNoAutoUppercase
,第一个字母仍然是大写的,但至少你键入的下一个字母将是小写的。
原始答:在Android中,这将设置使用inputType在EditText的布局文件的xml中的活动/片段(屏幕/页面你正在看)。你可以访问和编辑布局文件直接为Android?
是否使用setInputMask()来控制输入类型?强制使用小写(或切换大小写转换)可能会提供使用大写或小写的选项。我猜在Android布局xml文件中设置的是inputType=" textcapsentence "或类似的东西(https://developer.android.com/training/keyboard-input/style.html)。
UPDATE:你提到这个问题在5.4中被修复了。这看起来像是可以修复它的提交。我建议只实现这里所示的修复。https://qt.gitorious.org/qt/qtbase/commit/2b3f293d892c5268bd2a07ed17fa9fc5adacbd76
你提到你很高兴编辑Qt源代码。我认为错误可能在src/org/qtproject/qt5/android/qtactical vitydelegate .java
if ((inputHints & ImhUppercaseOnly) != 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_CHARACTERS;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
} else if ((inputHints & ImhLowercaseOnly) == 0 && (inputHints & ImhNoAutoUppercase) == 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_SENTENCES;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
}
应该改成:
if ((inputHints & ImhUppercaseOnly) != 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_CHARACTERS;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
} else if ((inputHints & ImhLowercaseOnly) == 0 && (inputHints & ImhNoAutoUppercase) == 0) {
//initialCapsMode |= android.text.TextUtils.CAP_MODE_SENTENCES; // not sure what to set here - could try 0 or null if commenting out line doesn't work
inputType |= android.text.InputType.TYPE_CLASS_TEXT;
}
如果这不能解决它,我建议搜索android.text.InputType的源代码。TYPE_TEXT_FLAG_CAP或android.text.TextUtils。CAP_MODE并用试错法替换它们。
- 物理键盘上的触发器按键
- 如何使用C/C++在MacOSX中获得键盘布局
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 视窗键盘输入 c++
- Switch 语句(字符串)一直选择默认值,除非其为零
- 将鼠标和键盘输入发送到 unity3d 游戏 (Rust)
- C ++异步键盘输入(标准方式)
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- 链接 c++ 动态库一直失败
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 我正在尝试创建一个菜单,但我的代码一直在循环
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- 覆盖应用程序的低级别键盘挂钩问题
- C++键盘挂钩 CTRL 键卡住
- 我想在 c++ 中对单向链表进行冒泡排序,但我一直面临左值错误,无法解决它
- 在 OpenGL 中使用键盘移动 3D 形状,C++
- SFML 键盘条件或
- 找不到键盘,即使我包括键盘。
- 我一直试图弄清楚我在这个链表程序中做错了什么
- Qt Android:当我在QLineEdit中输入时,虚拟键盘一直切换到大写