前言
在Linux系统上会遇到Qt开发的程序无法输入中文的情况,原因就是因为输入法框架是采用的fcitx,而不是ibus,Qt默认只支持ibus输入法框架。在Qt/5.15.2/gcc_64/plugins/platforminputcontexts/
路径下可以看到,只有libibusplatforminputcontextplugin.so
,没有libfcitxplatforminputcontextplugin.so
。而本文的目的就是编译出libfcitxplatforminputcontextplugin.so
动态库,使其支持fcitx输入法框架,从而支持输入中文。
下载源代码
git clone https://github.com/fcitx/fcitx-qt5
注意,是fcitx-qt5、fcitx-qt5、fcitx-qt5,fcitx 组织下还有一个容易混淆的仓库,请仔细区分。
构建编译fcitx-qt5
首先需要安装必备的依赖环境:
sudo apt install extra-cmake-modules
在这之前,最好设置Qt的环境变量:
export PATH=$PATH:/home/leo/Qt/5.15.2/bin/
不设置的话也行,可以 cmake 手动指定Qt目录。
如果你是 Qt 6,那么还需要修改一下fcitx-qt5的CMakeLists.txt
文件:
option(ENABLE_QT4 "Enable Qt 4" On)option(ENABLE_QT5 "Enable Qt 5" Off)option(ENABLE_QT6 "Enable Qt 6" On)option(BUILD_ONLY_PLUGIN "Build only plugin" Off)option(BUILD_STATIC_PLUGIN "Build plugin as static" Off)option(WITH_FCITX_PLUGIN_NAME "Enable plugin name with fcitx" On)
将ENABLE_QT5
改为off,ENABLE_QT6
改为on
然后创建一个build目录:
mkdir buildcd build
执行cmake命令
cmake .. -DENABLE_LIBRARY=false
执行make
make
在build目录下的qt5/platforminputcontext
就有需要的libfcitx5platforminputcontextplugin.so
插件动态库了。
安装(可选)
make install
命令会将插件装到指定qt环境下的plugins目录下
$ make install[4%] Automatic MOC for target fcitxplatforminputcontextplugin[4%] Built target fcitxplatforminputcontextplugin_autogen[100%] Built target fcitxplatforminputcontextpluginInstall the project...-- Install configuration: ""-- Installing: /home/leo/Qt/5.15.2/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so-- Set runtime path of "/home/leo/Qt/5.15.2/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so" to ""
也可自行将动态库拷贝到对应路径下或者自己的Qt程序打包路径下。
错误解决
找不到 FcitxConfig.cmake
CMake Error at CMakeLists.txt:36 (find_package):By not providing "FindFcitx.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "Fcitx", butCMake did not find one.Could not find a package configuration file provided by "Fcitx" (requestedversion 4.2.8) with any of the following names:FcitxConfig.cmakefcitx-config.cmakeAdd the installation prefix of "Fcitx" to CMAKE_PREFIX_PATH or set"Fcitx_DIR" to a directory containing one of the above files. If "Fcitx"provides a separate development package or SDK, be sure it has been installed. -- Configuring incomplete, errors occurred!See also "/media/veracrypt/mythware/gerrit/QT/ClassroomManagement/ClassroomManagement/Submodules/fcitx/fcitx-qt5/build/CMakeFiles/CMakeOutput.log".
解决方案
命令行增加 “-DENABLE_LIBRARY=false” 参数
cmake .. -DENABLE_LIBRARY=false
找不到 ECMConfig.cmake
CMake Error at CMakeLists.txt:8 (find_package):Could not find a package configuration file provided by "ECM" (requestedversion 1.4.0) with any of the following names:ECMConfig.cmakeecm-config.cmakeAdd the installation prefix of "ECM" to CMAKE_PREFIX_PATH or set "ECM_DIR"to a directory containing one of the above files. If "ECM" provides aseparate development package or SDK, be sure it has been installed.-- Configuring incomplete, errors occurred!See also "/home/shana/fcitx-qt5/build/CMakeFiles/CMakeOutput.log".
解决方案:
安装extra-cmake-modules
包:
sudo apt install extra-cmake-modules
找不到 Qt5Config.cmake
解决方案:
命令行增加-DQt5_DIR=[Qt目录]/lib/cmake/Qt5
参数
cmake .. -DENABLE_LIBRARY=false -DQt5_DIR=[Qt目录]/lib/cmake/Qt5