Qt 您所在的位置:网站首页 插件输入法 Qt

Qt

2023-08-21 19:18| 来源: 网络整理| 查看: 265

Qt应用启动之前会根据环境变量QT_IM_MODULE的值加载匹配的输入法插件,此过程可简单理解为:

Qt扫描QT_INSTALL/plugins/platforminputcontexts/路径下的.dll文件,并尝试加载得到插件中实现了QPlatformInputContextPlugin类的实例调用步骤2中实例的create方法,create的传入参数key为QT_IM_MODULE的值,如果该值与此插件所定义的值相匹配则生成QPlatformInputContext对象 QPlatformInputContext对象即为输入法上下文对象,相当于输入法的入口。不过具体到实际开发中,我们是定义一个QPlatformInputContext的子类来实现自定义的输入法。 Qt输入法的工作原理可描述为QWidget得到焦点Qt框架将该事件告知输入法上下文对象输入法上下文对象查看有焦点对象的类型,如果需要弹出输入窗口,则将自身设置为有焦点对象的事件过滤器并根据有焦点对象的位置显示出输入法面板根据需要,拦截发送给有焦点对象的相关按键事件,根据键值从输入法引擎中取得结果字符串。在适当时间点(比如检测到按回车键)将结果字符串发送给有焦点对象实现。

如果焦点切换到其他非可输入Widget,会触发输入法上下文对象的QPlatformInputContext的hideInputPanel方法,自定义输入法类只需重载该方法即可知道何时隐藏输入法面板

Qt 工程示例 .pro

QT += widgets gui-private TARGET = demoinputcontextplugin TEMPLATE = lib PLUGIN_TYPE = platforminputcontexts PLUGIN_CLASS_NAME = DemoPlatformInputContextPlugin HEADERS += \ PlatformInputContext.h \ main.h SOURCES += \ PlatformInputContext.cpp \ main.cpp DISTFILES += \ demoim.json

输入法上下文子类

/** * \file PlatformInputContext.h */ #ifndef PLATFORMINPUTCONTEXT_H #define PLATFORMINPUTCONTEXT_H #include #include class PlatformInputContext : public QPlatformInputContext { Q_OBJECT public: explicit PlatformInputContext(); ~PlatformInputContext(); virtual bool isValid() const; virtual void setFocusObject(QObject *object); virtual bool eventFilter(QObject * watched, QEvent *event); virtual void showInputPanel(); virtual void hideInputPanel(); private: QPointer m_focusedObject; }; #endif // PLATFORMINPUTCONTEXT_H /** * \file PlatformInputContext.cpp * * \brief 输入法上下文实现类 */ #include "PlatformInputContext.h" #include PlatformInputContext::PlatformInputContext() { } PlatformInputContext::~PlatformInputContext() { } bool PlatformInputContext::isValid() const { qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有