Qt 编译fcitx-qt5 插件支持中文输入法

前言

在Linux系统上会遇到Qt开发的程序无法输入中文的情况,原因就是因为输入法框架是采用的fcitx,而不是ibus,Qt默认只支持ibus输入法框架。在Qt/5.15.2/gcc_64/plugins/platforminputcontexts/路径下可以看到,只有libibusplatforminputcontextplugin.so,没有libfcitxplatforminputcontextplugin.so。而本文的目的就是编译出libfcitxplatforminputcontextplugin.so动态库,使其支持fcitx输入法框架,从而支持输入中文。

下载源代码

bash 复制代码
git clone https://github.com/fcitx/fcitx-qt5

注意,是fcitx-qt5、fcitx-qt5、fcitx-qt5,fcitx 组织下还有一个容易混淆的仓库,请仔细区分。

构建编译fcitx-qt5

首先需要安装必备的依赖环境:

复制代码
sudo apt install extra-cmake-modules

在这之前,最好设置Qt的环境变量:

ruby 复制代码
export PATH=$PATH:/home/leo/Qt/5.15.2/bin/

不设置的话也行,可以 cmake 手动指定Qt目录。

如果你是 Qt 6,那么还需要修改一下fcitx-qt5的CMakeLists.txt文件:

vbnet 复制代码
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目录:

bash 复制代码
mkdir build
cd build

执行cmake命令

ini 复制代码
cmake .. -DENABLE_LIBRARY=false

执行make

go 复制代码
make

在build目录下的qt5/platforminputcontext就有需要的libfcitx5platforminputcontextplugin.so插件动态库了。

安装(可选)

make install 命令会将插件装到指定qt环境下的plugins目录下

go 复制代码
make install

也可自行将动态库拷贝到对应路径下或者自己的Qt程序打包路径下。

错误解决

找不到 FcitxConfig.cmake

swift 复制代码
CMake Error at CMakeLists.txt:36 (find_package):
By not providing "FindFcitx.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Fcitx", but
CMake did not find one.

Could not find a package configuration file provided by "Fcitx" (requested
version 4.2.8) with any of the following names:

  FcitxConfig.cmake
  fcitx-config.cmake

Add 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" 参数

ini 复制代码
cmake .. -DENABLE_LIBRARY=false

找不到 ECMConfig.cmake

sql 复制代码
CMake Error at CMakeLists.txt:8 (find_package):
Could not find a package configuration file provided by "ECM" (requested
version 1.4.0) with any of the following names:

  ECMConfig.cmake
  ecm-config.cmake

Add 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 a
separate 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参数

ini 复制代码
cmake .. -DENABLE_LIBRARY=false -DQt5_DIR=[Qt目录]/lib/cmake/Qt5
相关推荐
BullSmall10 分钟前
linux 系统下模拟网络丢失和ping延迟,可以怎么来模拟
linux·网络·php
brahmsjiang10 分钟前
理解Android AOT编译与内存映射:从Zygote启动到页表权限隔离
android·linux·zygote
亚空间仓鼠11 分钟前
OpenEuler系统常用服务(十)
linux·运维·服务器·网络
艾莉丝努力练剑11 分钟前
【Linux线程】Linux系统多线程(四):线程ID及进程地址空间布局,线程封装
java·linux·运维·服务器·c语言·c++·学习
dddddppppp12323 分钟前
linux head.s 从第一条指令到start_kernel
linux·运维·服务器
BioRunYiXue24 分钟前
AlphaGenome:DeepMind 新作,基因组学迎来 Alpha 时刻
java·linux·运维·网络·数据库·人工智能·eclipse
十五年专注C++开发25 分钟前
windows和linux使用system启动进程是一样的吗?
linux·c++·windows·system
此刻觐神28 分钟前
IMX6ULL开发板学习-04(Linux磁盘管理相关命令)
linux·运维·学习
qq_85730581938 分钟前
ubuntu 22 源码安装bochs
linux·运维·ubuntu
Zhu75839 分钟前
【软件更新】在Ubuntu24 LTS中更新openssl到指定版本,例如openssl3.5.6 LTS
linux·ssh·ssl