c++ - `QVirtualKeyboard`的激活和部署(在Windows中)

标签 c++ windows qt qt5

如何为我的应用程序激活 Qt5 虚拟键盘? 更重要的是,Qt 虚拟键盘需要哪些文件才能出现在我部署的应用程序中?

我之所以采用这种问答方式,是因为我花了相当长的时间才将所有的零碎内容整合在一起。也许其他人会从中受益。

最佳答案

documentation for Qt Virtual Keyboard其实并没有那么糟糕。然而,对于 QtWidgets/C++ 项目来说,为已部署的应用程序做好一切准备仍然具有挑战性。我已使用 Qt 5.10 和 Windows 10 测试了以下建议:

  1. 安装虚拟键盘。在 Windows 中,可以使用 Qt 安装程序,选择相应 Qt 版本下的“Qt 虚拟键盘”选项。

    (告诉我其他平台需要什么 - 我将添加此信息)

  2. Enable the environment variable ,即加载插件可以在 main.cpp 中实现(在实例化任何 QApplication 之前):

    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
    

    这将为任何输入字段启用虚拟键盘。

  3. 部署应用程序需要哪些文件?虚拟键盘需要自己的plugin.dll,它依赖于模块Qt5Network、QtQml、QtQuick、QtSvg。因此目录结构必须至少包含这些文件:

    platforminputcontexts/qtvirtualkeyboardplugin.dll
    YOURBIN.exe
    Qt5Network.dll
    Qt5Qml.dll
    Qt5Quick.dll
    Qt5Svg.dll
    

    编辑:插件将动态加载更多插件,也使用插件描述文件,因此也部署这些插件(在 qml 子目录中找到它们) qt安装目录):

    Qt/labs/folderlistmodel/qmldir
    Qt/labs/folderlistmodel/qmlfolderlistmodelplugin.dll
    QtQuick/Layouts/qmldir
    QtQuick/Layouts/qquicklayoutsplugin.dll
    QtQuick/VirtualKeyboard/Styles/qmldir
    QtQuick/VirtualKeyboard/Styles/qtvirtualkeyboardstylesplugin.dll
    QtQuick/Window.2/qmldir
    QtQuick/Window.2/windowplugin.dll
    QtQuick.2/qmldir
    QtQuick.2/qtquick2plugin.dll
    
  4. 除了这些文件之外,还需要标准 Dll,可能还需要其他插件、DLL。这一切都取决于您的配置以及您是否使用 MSVC 或 MinGW:

    iconengines/...dll
    imageformats/...dll
    platform/...dll
    Qt5Gui.dll
    Qt5Widget.dll
    Qt5Core.dll
    libwinpthread-1.dll
    libEGL.dll
    libGLESv2.dll
    libstdc++-6.dll
    libgcc_s_dw2-1.dll
    

注意:qt windows deployment tool是一个很好用且方便的工具。但是,默认情况下,它不会复制虚拟键盘所需的所有文件。

编辑 - 注 2: qt windows deployment tool可以复制几乎所有需要的文件。它不会复制虚拟键盘样式 DLL(Qt 5.10、Mingw)。如果只需要虚拟键盘,它也会复制很多不必要的文件:

windeployqt.exe --compiler-runtime --qmldir c:\Qt\5.10.0\mingw53_32\qml 
--quick --qml --release --force PATH_TO_BINARY

然后手动创建目录/将相应的 DLL + qmldir 复制到:

QtQuick/VirtualKeyboard/Styles

关于c++ - `QVirtualKeyboard`的激活和部署(在Windows中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938048/

相关文章:

c++ - 为什么将私有(private)函数的引用传递给外部函数是有效的?

windows - 如何安装和使用 WinPcap?

python - 为什么Python 3默认读取编码为cp1252的文件?

c++ - Qt SQLite 无法执行 Select 查询

linux - 在Qt中通过套接字发送结构

C++:是否可以在同一个字节内压缩 `bool` 个对象?

c++ - 根据值对 map 进行排序

.NET System::String 到存储在 char* 中的 UTF8 字节

c++ - 使用目标 Windows 7 编译后缺少 shcore.dll

c++ - 为什么我得到这个 "error: undefined reference to ` qt_version_tag'”?