自作QtアプリやQtCreatorで日本語入力ができない問題の解決法


# 問題
Qtの公式サイトから落としてきたインストーラーでインストールしたQtCreatorやQtにリンクしてある自作アプリケーションで日本語入力ができない。

# 環境
- Linux Mint 19.1
- Qt 5.12.0（インストールした方）
- QtCreator 4.8.1(Based on Qt 5.12.0)
- Qt 5.9.5（Linux Mintにある方）
- インプットメソッド：fcitx

# 原因の調査
調べてみたら

- `~/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts`や
- `~/Qt/5.12.0/gcc_64/plugins/platforminputcontexts`に

`libfcitxplatforminputcontextplugin.so`がないためらしい。

QT_IM_MODULE環境変数がfcitxになっていないからと言うWebページもあったが、私の環境では

```bash
$ env | grep QT
QT4_IM_MODULE=fcitx
QT_QPA_PLATFORMTHEME=qt5ct
QT_ACCESSIBILITY=1
QT_IM_MODULE=fcitx
```
とちゃんとfcitxになっていた。

# fcitx-qt5をコンパイル
参考：[Ubuntu 16.04LTSでのQtCreator日本語入力](https://qiita.com/sazus/items/4b4f68e1fb86cc2f36cc)

```bash
$ git clone https://github.com/fcitx/fcitx-qt5.git
$ cd fcitx-qt5/
$ sudo apt install cmake ecm extra-cmake-modules fcitx-libs-dev
$ cmake . -DCMAKE_PREFIX_PATH=/home/subbbbbb/Qt/5.12.0/gcc_64
```
怒られた。

```bash
CMake Error at /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:9 (message):
  Failed to find "GL/gl.h" in "/usr/include/libdrm".
Call Stack (most recent call first):
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:174 (include)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:89 (find_package)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
  CMakeLists.txt:31 (find_package)
```
それっぽいのを適当に入れる。

```bash
$ sudo apt install mesa-common-dev
```
すると`/usr/include/GL`フォルダができて、その中に`gl.h`があったため`~/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake`の4行目を

```cmake
set(_GL_INCDIRS "/usr/include/libdrm")
```
から

```cmake
set(_GL_INCDIRS "/usr/include")
```
に書き換えて保存する。
再実行するとまた怒られた

```bash
$ cmake . -DCMAKE_PREFIX_PATH=/home/subbbbbb/Qt/5.12.0/gcc_64
CMake Error at /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:15 (message):
  The imported target "Qt5::Gui" references the file

     "/usr/lib/x86_64-linux-gnu/libEGL.so"

  but this file does not exist.  Possible reasons include:

  * The file was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and contained

     "/home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake"

  but not all the files it references.

Call Stack (most recent call first):
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:50 (_qt5_Gui_check_file_exists)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:72 (_qt5gui_find_extra_libs)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:174 (include)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:89 (find_package)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
  CMakeLists.txt:31 (find_package)


-- Configuring incomplete, errors occurred!
```
`/usr/lib/x86_64-linux-gnu/libEGL.so`がないらしい。

```bash
$ ls -l /usr/lib/x86_64-linux-gnu/libEGL*
libEGL.so -> libEGL.so.1.0.0
libEGL.so.1 -> libEGL.so.1.1.0*
libEGL.so.1.1.0*
libEGL_mesa.so.0 -> libEGL_mesa.so.0.0.0
libEGL_mesa.so.0.0.0
libEGL_nvidia.so.0 -> libEGL_nvidia.so.410.78*
libEGL_nvidia.so.410.78*
```
存在しないファイル`libEGL.so.1.0.0`へのシンボリックリンクになっていたため、リンクを貼り直す。

```bash
$ sudo ln -si libEGL.so.1.1.0 libEGL.so
```
再度実行したらまた同じようなことを言われた。

```bash
$ cmake . -DCMAKE_PREFIX_PATH=/home/subbbbbb/Qt/5.12.0/gcc_64
CMake Error at /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:15 (message):
  The imported target "Qt5::Gui" references the file

     "/usr/lib/x86_64-linux-gnu/libGL.so"

  but this file does not exist.  Possible reasons include:

  * The file was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and contained

     "/home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake"

  but not all the files it references.

Call Stack (most recent call first):
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:50 (_qt5_Gui_check_file_exists)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:74 (_qt5gui_find_extra_libs)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:174 (include)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:89 (find_package)
  /home/subbbbbb/Qt/5.12.0/gcc_64/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
  CMakeLists.txt:31 (find_package)


-- Configuring incomplete, errors occurred!
```
これもリンク切れとなっていたため、同様に貼り直す。

```bash
sudo ln -si libGL.so.1.7.0 libGL.so
```
4度目の正直

```bash
$ cmake . -DCMAKE_PREFIX_PATH=/home/subbbbbb/Qt/5.12.0/gcc_64
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Could NOT find XKBCommon_XKBCommon (missing: XKBCommon_XKBCommon_LIBRARY XKBCommon_XKBCommon_INCLUDE_DIR) (found version "")
CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find XKBCommon (missing: XKBCommon_LIBRARIES XKBCommon) (Required
  is at least version "0.5.0")
Call Stack (most recent call first):
  /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindXKBCommon.cmake:30 (find_package_handle_standard_args)
  CMakeLists.txt:33 (find_package)


-- Configuring incomplete, errors occurred!
```
xkbcommonがないと言われる。入れる。

```bash
$ sudo apt install libxkbcommon-dev
```
5度目の正直

```bash
cmake . -DCMAKE_PREFIX_PATH=/home/subbbbbb/Qt/5.12.0/gcc_64
-- Found XKBCommon_XKBCommon: /usr/lib/x86_64-linux-gnu/libxkbcommon.so (found version "0.8.0") 
-- Found XKBCommon: /usr/lib/x86_64-linux-gnu/libxkbcommon.so (found suitable version "0.8.0", minimum required is "0.5.0") found components:  XKBCommon 
-- Checking for module 'fcitx'
--   Found fcitx, version 4.2.9.6
-- Checking for module 'fcitx-config'
--   Found fcitx-config, version 4.2.9.6
-- Checking for module 'fcitx-utils'
--   Found fcitx-utils, version 4.2.9.6
-- fcitx4-config found /usr/bin/fcitx4-config
-- Found Fcitx: 4.2.9.6 (Required is at least version "4.2.8") 
-- Looking for dgettext
-- Looking for dgettext - found
-- Found LIBINTL: /usr/include  
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- The following OPTIONAL packages have been found:

 * PkgConfig

-- The following REQUIRED packages have been found:

 * ECM (required version >= 1.4.0)
 * Qt5DBus
 * Qt5Widgets
 * Qt5Concurrent
 * Qt5 (required version >= 5.1.0)
 * Qt5Gui (required version >= 5.1.0)
 * XKBCommon (required version >= 0.5.0), Keyboard handling library using XKB data, <http://xkbcommon.org>
 * Fcitx (required version >= 4.2.8)
 * LibIntl
 * Qt5Core

-- Configuring done
-- Generating done
-- Build files have been written to: /home/subbbbbb/Documents/MyFolder/2019/qt_fcitx/fcitx-qt5
```
やっと通った。あとはコンパイルするだけ。

```bash
$ make -j 6
```
できたプラグインをコピーする。

```bash
$ cd platforminputcontext/
$ cp libfcitxplatforminputcontextplugin.so ~/Qt/5.12.0/gcc_64/plugins/platforminputcontexts/
$ cp libfcitxplatforminputcontextplugin.so ~/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/
```
1つ目のコピーの後、自作アプリケーションを再起動で日本語入力ができるようになった。
2つ目のコピーの後、QtCreatorを再起動で日本語入力ができるようになった。

# 別の解決法
OSにデフォルトで入っているQtとインストールしたQtのバージョンが違うとセグフォを起こすと言う情報があったのと、昔やっても日本語入力が出来るようにならなかったような記憶があったため後回しにしたが、
`/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts`にある`libfcitxplatforminputcontextplugin.so`をコピーしても同じように日本語入力ができるようになった。今までの苦労は一体…

# まとめ
`/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts`にある`libfcitxplatforminputcontextplugin.so`を
`~/Qt/5.12.0/gcc_64/plugins/platforminputcontexts/`と
`~/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/`に
コピーしてみて日本語入力が出来るようにならなかったら、仕方がないのでfcitx-qt5をコンパイルしましょう。

# 参考
- [Ubuntu 16.04LTSでのQtCreator日本語入力](https://qiita.com/sazus/items/4b4f68e1fb86cc2f36cc)
- [fcitx環境のQt5.4で日本語入力できるようにする](https://blog.pyyoshi.com/2015/03/04/fcitxhuan-jing-noqt5-4deri-ben-yu-ru-li-dekiruyounisuru/)