Ubuntu下QtCreator无法使用搜狗输入法 及 安装方法

Qt Creator下载后,无法使用fcitx框架输入法,比如:搜狗输入法。这是因为: /opt/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts  中缺少了支持基于qt库开发软件的fcitx so插件。

已知 Qt Creator 13.0.1 基于Qt6.6.3开发,以下提供我基于Qt6.6.3库进行编译的 libfcitx5platforminputcontextplugin.so 插件。你可以下载放入里面的plugins目录。

链接: https://pan.baidu.com/s/1uwf80rU7eMhmaPMv3nTjnA 提取码: 3mum

注意:这个只能用于基于Qt6.6.3开发的软件!!如果你的Qt Creator 或者 其他基于Qt开发的软件 不是基于Qt 6.6.3进行开发的,这个fcitx5输入法插件也许会有Bug,比如:Qt Creator输入文字时闪退、输入法不起效果等等。所以还请自行查询你基于Qt开发的软件是基于什么Qt版本号的,然后根据需要,按照本文 二 ~ 三 的内容,编译出自己所需要的fcitx5 so插件。

那如何生成 “支持基于qt库开发软件的fcitx so插件” 呢?接下来将详细讲述。

一、安装Qt6

1、解释一下 Qt 的版本号

比如 6.6.3 是完整的 Qt 版本号,第一个数字 6 是大版本号(major),第二个数字 6 是小版本号(minor),第三个数字 3 是补丁号(patch)。 只要前面两个数字相同,Qt 的特性就是一致的,最后的数字是对该版本的补丁更新。

2、安装包的下载


Qt 5.15 之后已经不提供离线安装包了,所以只能用在线安装包。官网下载比较慢,可以在清华镜像源下载在线安装包。

清华Qt镜像源:https://mirrors.tuna.tsinghua.edu.cn/qt/

选择:official_releases/

选择:online_installers/

选择:qt-unified-linux-x64-online.run 下载

3、安装步骤

(1) 给run文件授予运行权限

yammie@oym-pc:/home/yammie 
$ sudo chmod a+x qt-unified-linux-x64-online.run


(2) 右键→运行,有Qt账号,可以登录。

(3) 接受开源,选择个体使用(非商用)

(4) 直接Next

(5) 随便选择一个

(6) 更改安装路径,自定义安装包

(7) 根据需要选择Qt 6.7.0里面的组件,不建议全选,一般选择Desktop、WebAssembly (Single-threaded)、Sources、Qt Share Tools、Additional Libraries就可以了,后面有需要再安装。

(8) 选择Cmake License agreement

(9) 安装即可

二、查看Qt Creator是基于哪个Qt版本构建的

在终端输入qt --version,发现Qt Creator是基于Qt 6.6.3进行构建的。在配置fcitx输入法前,我们需要下载Qt 6.6.3版本的源码进行编译和配置。

yammie@oym-pc:/home/yammie 
$ qt --version

Qt Creator 13.0.1 based on Qt 6.6.3

问题1:Qt Creator 13.0.1里面应用的是Qt 6.7.0的库,为什么qt --version显示的却是Qt 6.6.3的库?

我们下载的Qt 6.7.0 是Qt Creator 13.0.1当前应用的库,而Qt Creator13.0.1这个应用软件是基于Qt 6.6.3这个库开发出来的。两者是不同概念。

我们可以在[编辑→Preferences]中看到自动检测到Qt安装目录下的/6.7.0/gcc_64/bin/qmake

问题2:我们在编译适用于qt6的fcitx输入法插件时,可以采用Qt Creator自带的Qt 6.7.0库作为依赖吗?


不行。Qt Creator只是使用Qt 6.7.0的库进行开发,当我们要编译适用于qt6的fcitx输入法插件时,需要采用构建Qt Creator时所使用的Qt库,即qt --version显示的 Qt 6.6.3。

三、根据Qt Creator based on 的Qt版本进行编译与配置

1、下载Qt 6.6.3的源码并进行编译、配置

(1) 已知 Qt Creator13.0.1是基于Qt 6.6.3构建的,故我们去清华大学镜像站下载Qt 6.6.3的源码。

https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/

从该页面进去,选择6.6版本

选择6.63版本的Qt库

点击single,下载qt-everywhere-src-6.6.3.zip

(2) 下载到~/下载/Programs目录后,在/opt新建qt6文件夹。把qt-everywhere-src-6.6.3.zip提取到 /opt/qt6目录下,好进行编译、配置,日后不需要了还可以直接删除。

(3) 对qt6目录下的内容进行编译,配置

根据/opt/qt6目录下的CMakeLists.txt,对整个Qt 6.6.3进行编译,在build文件夹下生成编译文件

yammie@oym-pc:/opt/qt6 
$ sudo cmake -B build

进入build目录,使用make对刚才编译的文件继续编译,(这个过程为编译选定的目标)
注意:千万不要写成make -j,编译时会全部占用CPU核心,导致运行崩溃。请指定为make -j4。

yammie@oym-pc:/opt/qt6/build 
$ make -j4

问题1:为什么使用make -j4 而不是 make -j?

官方说明:https://www.gnu.org/software/make/manual/make.html#Makefile-Arguments

GNU make知道如何同时执行多个作业。
通常,make一次只执行一个作业,在执行下一个作业之前等待它完成。
然而,“-j”或“——jobs”选项告诉make同时执行多个作业。
您可以使用. notparallel伪目标(请参阅特殊的内置目标名称)来禁止特定makefile中的并行性。

在MS-DOS上,“-j”选项没有效果,因为该系统不支持多处理。

如果“-j”选项后面跟着一个整数,这是一次执行的作业的数量;(通常是make -j4)
这被称为工作槽的数量。
如果在“-j”选项之后没有看起来像整数的东西,那么作业槽的数量就没有限制。
默认的作业槽数是1,这意味着串行执行(一次执行一件事)。

处理递归make调用会引发并行执行的问题。
有关这方面的更多信息,请参见与子make通信选项。

如果一个作业失败(被一个信号杀死或以非零状态退出),并且该作业不会忽略错误(请参阅菜谱中的错误),那么将不会运行重新创建相同目标。
如果作业失败,并且没有提供“-k”或“——keep-going”选项(请参阅选项摘要),则执行make aborts。


如果make因为任何原因(包括一个信号)终止了子进程的运行,那么它将在实际退出之前等待它们完成。

当系统负载过重时,您可能希望运行比负载较轻时更少的作业。
您可以使用“-l”选项告诉make根据负载平均值限制一次运行的作业数量。
“-l”或“——max-load”选项后面跟着一个浮点数。
例如, -l 2.5

编译完成后,/opt/qt6/build/qtbase 是我们接下来需要依赖的预编译目录。此处提醒一下。

2、下载fcitx5-qt,编译出so插件

(1) 进入fcitx5-qt下载页面:https://download.fcitx-im.org/fcitx5/fcitx5-qt/,此处选择:fcitx5-qt-5.1.4.tar.xz 下载,下载到 ~/下载/Programs

(2) 并提取到此目录


(3) 进入fcitx5-qt-5.1.4目录,编辑CmakeLists.txt,修改以下内容:Qt6设置为On,Qt4,Qt5设置为Off,其它对照着设置就行。

(4) 进入fcitx5-qt-5.1.4目录,开启终端,通过build命令,根据CMakeList.txt以及Qt 6.6.3预编译的文件:/opt/qt6/build/qtbase编译整个目录,生成build文件夹。

yammie@oym-pc:/home/yammie/下载/Programs/fcitx5-qt-5.1.4 
$ cmake -B build -DCMAKE_PREFIX_PATH=/opt/qt6/build/qtbase 

编译过程中有XBC:XBC的问题:

-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
。。。。。。省略。。。。。。
-- Configuring done
CMake Error at qt6/platforminputcontext/CMakeLists.txt:43 (target_link_libraries):
  Target "fcitx5platforminputcontextplugin-qt6" links to:

    XCB::XCB

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.

请到fcitx5-qt-5.1.4/qt6/platforminputcontext/CMakeLists.txt:43把XCB:XCB的内容删掉
再次执行上述build命令,编译成功

yammie@oym-pc:/home/yammie/下载/Programs/fcitx5-qt-5.1.4 
$ cmake -B build -DCMAKE_PREFIX_PATH=/opt/qt6/build/qtbase


-- The following OPTIONAL packages have been found:

 * Qt6CoreTools (required version >= 6.6.3)
 * Qt6Core (required version >= 6.0.0)
 * Qt6DBusTools (required version >= 6.6.3)
 * Qt6DBus (required version >= 6.0.0)
 * Qt6WidgetsTools (required version >= 6.6.3)
 * OpenGL
 * Qt6Widgets (required version >= 6.0.0)
 * XKB (required version >= 0.5.0), XKB API common to servers and clients., <http://xkbcommon.org>
 * WrapVulkanHeaders
 * Qt6GuiTools (required version >= 6.6.3)

-- The following REQUIRED packages have been found:

 * ECM (required version >= 1.4.0)
 * XKBCommon (required version >= 0.5.0), Keyboard handling library using XKB data, <http://xkbcommon.org>
 * Qt6 (required version >= 6.0.0)
 * Qt6Gui (required version >= 6.0.0)

-- Configuring done
-- Generating done
-- Build files have been written to: /home/yammie/下载/Programs/fcitx5-qt-5.1.4/build

(5) 进入build目录,使用make对刚才编译的文件继续编译,(这个过程为编译选定的目标)

注意:千万不要写成make -j,编译时会全部占用CPU核心,导致运行崩溃。请指定为make -j4。

yammie@oym-pc:/home/yammie/下载/Programs/fcitx5-qt-5.1.4/build 
$ make -j4



[  4%] Automatic MOC for target Fcitx5Qt6DBusAddons
[  4%] Built target Fcitx5Qt6DBusAddons_autogen
[  9%] Building CXX object qt6/dbusaddons/CMakeFiles/Fcitx5Qt6DBusAddons.dir/fcitxqtdbustypes.cpp.o

。。。。。。省略。。。。。。

[ 95%] Building CXX object qt6/platforminputcontext/CMakeFiles/fcitx5platforminputcontextplugin-qt6.dir/qtkey.cpp.o
[100%] Linking CXX shared module libfcitx5platforminputcontextplugin.so
[100%] Built target fcitx5platforminputcontextplugin-qt6

(6) 最后在 /fcitx5-qt-5.1.4/build/qt6/platforminputcontext 目录下生成 libfcitx5platforminputcontextplugin.so 插件

3、复制libfcitx5platforminputcontextplugin.so 插件到Qt Creator有关plugins的目录里

(1) 复制libfcitx5platforminputcontextplugin.so插件到/opt/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts

yammie@oym-pc:/home/yammie/下载/Programs/fcitx5-qt-5.1.4/build/qt6/platforminputcontext 
$ sudo cp libfcitx5platforminputcontextplugin.so /opt/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts

(2) 给libfcitx5platforminputcontextplugin.so授予可执行权限

yammie@oym-pc:/opt/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts 
$ sudo chmod a+x libfcitx5platforminputcontextplugin.so

(3) 复制libfcitx5platforminputcontextplugin.so插件到 /opt/Qt/Tools/QtCreator/lib/qtcreator/plugins

yammie@oym-pc:/home/yammie/下载/Programs/fcitx5-qt-5.1.4/build/qt6/platforminputcontext 
$ sudo cp libfcitx5platforminputcontextplugin.so /opt/Qt/Tools/QtCreator/lib/qtcreator/plugins

(4) 给libfcitx5platforminputcontextplugin.so授予可执行权限

yammie@oym-pc:/opt/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts 
$ sudo chmod a+x libfcitx5platforminputcontextplugin.so

四、放入fcitx-qt5服务于qt6框架的so插件后,在Qt Creator可以使用fcitx输入法了

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值