想要在Qt写的程序中既可以使用qtvirtualkeyboard输入中文,又可以使用实体键盘和ibus输入法输入中文,能够接受子不同时使用,应该怎么办?Qt写的程序中要用输入法必须设置环境变量QT_IM_MODULE,但是这个环境变量已经被我设置为qtvirtualkeyboard了。
操作环境系统 Debian/Linux Qt 6.4
我尝试过
在代码中修改环境变量
```c++
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
qputenv("QT_IM_MODULE", QByteArray("ibus"));
但是并不生效。
后来发现只有在APP构造的之前设置才是有效的。这说明APP构造的时候回去加载输入法插件。我想做的就是让它重新加载一遍新的输入法插件。
也有尝试使用
bool useQtVirtualKeyboard = ...; // 根据需要动态设置
QByteArray imModule = useQtVirtualKeyboard ? QByteArrayLiteral("qtvirtualkeyboard") : QByteArrayLiteral("ibus");
qputenv("QT_IM_MODULE", imModule);
// 获取主窗口,并从中获取当前的输入方法
QInputMethod *inputMethod = qApp->inputMethod();
if (inputMethod) {
// 重设当前输入方法
inputMethod->reset();
// 通知当前输入法重新加载
inputMethod->update(Qt::ImEnabled);
}
也不生效。