Linux下解决QT应用程序中不能输入中文的问题

1. 在GitHub下载fcitx插件源码

地址:https://github.com/fcitx/fcitx-qt5 或者在本文下载中

2.修改CMakeLists.txt

在"set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)"行之后加入:

set(Qt5Core_DIR /xxxx_QT_Install_Dir/gcc_64/lib/cmake/Qt5Core/)

set(Qt5Gui_DIR /xxxx_QT_Install_Dir/gcc_64/lib/cmake/Qt5Gui/)

set(Qt5Widgets_DIR /xxxx_QT_Install_Dir/gcc_64/lib/cmake/Qt5Widgets/)

set(Qt5DBus_DIR /xxxx_QT_Install_Dir/gcc_64/lib/cmake/Qt5DBus/)

3.编译源码

进入源码所在目录:
xxxx$> cmake ./

xxxx$> make

xxxx$> sudo make install

注意:如果机器中没有依赖的包,会编译失败。需要先下载依赖包。如:
yum install XKBCommon
yum install Fcitx
等依赖库, 缺什么就下载安装。

4.修改profile文件

/etc/profile 文件末尾添加:
GTK_IM_MODULE=fcitx
export XIM_PROGRAM=fcitx
export XIM=fcitx
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

5.重启机器

重新开机看能不能输入中文的问题。

6.源码下载

源码下载

编译后的模块

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 如果在LinuxQt不能输入中文,可能是因为缺少相应的输入法支持。您可以尝试安装支持中文输入输入法,例如Fcitx或IBus。安装好输入法后,重新启动Qt应用程序,应该就可以输入中文了。如果您已经安装了输入法但还是无法输入中文,可以检查一下您的输入法配置是否正确。 ### 回答2: 在Linux使用Qt编程过程,由于默认输入法的问题,导致无法直接输入中文。这是因为Qt采用的是XIM(X Input Method)输入法,而不是Fcitx或IBus等常见的输入法。在默认情况下,XIM输入法不支持中文输入。 要解决这个问题,我们可以启用Fcitx或IBus作为输入法。可通过以下步骤实现: 1.安装Fcitx或IBus输入法: 要安装Fcitx,在终端输入以下命令: sudo apt-get install fcitx fcitx-bin fcitx-config-common fcitx-module-dbus fcitx-module-x11 fcitx-modules fcitx-ui-classic 要安装IBus,在终端输入以下命令: sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 ibus-table 2.打开Qt Creator,选择“Tools”菜单 - "Options" - "Environment" - "General" - “Add”,在弹出的窗口输入"QT_IM_MODULE"并设置值为"fcitx"或"ibus"。 3.重启Qt Creator并重新打开项目。 此时,您应该可以在Qt Creator使用Fcitx或IBus输入法,从而实现中文输入。如果仍然无法输入中文,请考虑尝试更换其他输入法或者查看是否有其他配置问题。 ### 回答3: 在Linux使用Qt进行开发时,遇到了不能输入中文问题。主要原因是因为Linux下的键盘输入与Windows下的键盘输入不同。在Linux下,由于使用的是X输入系统,因此需要使用X输入法进行中文输入。 为了解决这个问题,通常需要在Qt程序添加代码,调用系统默认的X输入法或指定的X输入法。具体步骤如下: 1. 在Qt项目的.pro文件添加以下代码: ``` unix: LIBS += -L/usr/X11R6/lib -lX11 -lXtst ``` 这个语句告诉Qt编译器链接X11和Xtst库。 2. 在Qt程序的.cpp文件添加以下代码: ``` #include <X11/Xlib.h> #include <X11/keysym.h> // 主要函数 void SetXIM(QWidget *w) { Qt::HANDLE handle = (Qt::HANDLE)w->winId(); XIC ic = XCreateIC(qt_xdisplay(), XNInputStyle, XIMPreeditNothing | XIMStatusNothing, XNClientWindow, handle, NULL); XSetICValues(ic, XNFilterEvents, True, NULL); XSelectInput(qt_xdisplay(), handle, KeyPressMask | KeyReleaseMask); XSetICFocus(ic); } // 事件过滤器 bool QApplication::x11EventFilter(XEvent *event) { if (event->type == KeyPress || event->type == KeyRelease) { static bool control_down = false; KeyCode sym = XLookupKeysym(&event->xkey, 0); if (sym == XK_Control_L || sym == XK_Control_R) { control_down = (event->type == KeyPress); if (!control_down) { SetEnglishIM(); } } else if (sym == XK_space) { static bool space_control_down = false; if (control_down) { space_control_down = (event->type == KeyPress); if (event->type == KeyRelease) { if (space_control_down == true) { SetXIM(qApp->focusWidget()); } else { SetEnglishIM(); } } } } } return false; } // 切换为英文输入法 void SetEnglishIM() { static bool eng_cursor_set = false; QByteArray lang; QString engineName; lang = qgetenv("LC_CTYPE"); if (qEnvironmentVariableIsEmpty(lang)) { lang = qgetenv("LANG"); } if (lang.indexOf("zh_CN") != -1) { engineName = QString("xim"); } QInputMethod *inputMethod = qApp->inputMethod(); if (inputMethod->inputMethodHints() & Qt::ImhHiddenText) { return; } bool ok = inputMethod->setInputMethodEngine(engineName); if (ok == true) { inputMethod->reset(); if (!eng_cursor_set) { QGuiApplication::inputMethod()->setCursorRectangle(0, 0 , 30, 30); eng_cursor_set = true; } } } ``` 以上代码会创建一个函数,该函数用于设置X输入法。同时会创建一个事件过滤器(x11EventFilter),用于捕获键盘事件并进行处理。这个过滤器会处理按下和释放事件,当按下Ctrl键或Space键时进行相应的操作。 3. 在Qt程序调用SetXIM函数,用于设置X输入法。 4. 运行Qt程序,测试中文输入功能是否正常。 总体上,处理在Linux使用Qt进行中文输入问题,需要了解Linux下的键盘输入与Windows的不同,以及如何调用系统的X输入法或者指定的X输入法。正确设置X输入法后,就可以在Qt程序实现中文输入
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值