如何让Windows触摸键盘显示在Qt 5应用程序



我创建了一个简单的Qt 5.3 GUI应用程序,它有两个小部件- QWebView和QLineEdit。我默认URL是google.com。但在没有键盘的Windows 8.1平板电脑上,当你触摸Google.com上的搜索框或行编辑工具时,触摸键盘都不会显示出来。考虑到微软以其无限的智慧,没有提供一个简单的API来显示触摸键盘,如何解决这个问题?我在这个问题上做了很多搜索,结果到处都是,从它已经被修复到它不能做。还有人看到了吗?还有别的办法吗?

您可以手动打开触摸键盘。查看我的答案中的代码示例https://stackoverflow.com/a/40921638/332528

在我的QML应用程序中,我使用这个来打开Windows键盘(我使用Textfield的信号focusChanged来打开/关闭键盘,我简化了下面的代码,删除了"如果单击相同的Textfield和其他东西"的条件,这取决于我想如何处理键盘):

#include <shellapi.h>
#include <Windows.h>
void openKeyboard()
{
  HANDLE hWnd = FindWindow("OSKMainClass", NULL);
  if (!hWnd) //if not open yet
  {
    void *OldValue;
    Wow64DisableWow64FsRedirection(&OldValue);
    ShellExecute(NULL, "open", "C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe", NULL, NULL, SW_SHOWNORMAL); //or "C:pathTo\osk.exe"
    Wow64RevertWow64FsRedirection(OldValue);
  }
}
void closeKeyboard()
{
  if (mKeyboardOpenRequestsNumber == 0)
  {
    HANDLE hWnd = FindWindow("IPTip_Main_Window", NULL); //or "OSKMainClass" if osk.exe is used.
    if (hWnd) //if keyboard window is found
      PostMessage((HWND)hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
  }
}

最新更新