前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻量级Qt键盘-简拼输入

轻量级Qt键盘-简拼输入

作者头像
Qt君
发布2020-03-03 11:12:02
5720
发布2020-03-03 11:12:02
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

❝在原有的键盘基础上新增简拼,词组,短语的输入功能。❞

加载词组字库

  字库加载在QMap<QString, QList<QPair<QString, QString>> >容器中。

代码语言:javascript
复制
/* 加载词组字库内容 */
QFile pinyin(":/ChineseLib/pinyin_phrase.txt");
if (! pinyin.open(QIODevice::ReadOnly)) {
    qDebug() << "Open pinyin file failed!";
    return;
}

/* 按行读取内容 */
while (! pinyin.atEnd()) {
    QString buf = QString::fromUtf8(pinyin.readLine()).trimmed();
    if (buf.isEmpty())
        continue;
        
    /* 去除#号后的注释内容 */
    if (buf.left(1) == "#")
        continue;

    /* 正则匹配词组内容并通过组捕获获取'词组'和'拼音' */
    QRegExp regExp("(\\S+): ([\\S ]+)");
    int pos = 0;
    while ((pos = regExp.indexIn(buf, pos)) != -1) {
        pos += regExp.matchedLength();
        QString second = regExp.cap(1);  /* 词组 */
        QString first = regExp.cap(2); /* 拼音 */

        QStringList strList = first.split(" ");
        QString abb;
        for (int i = 0; i < strList.count(); i++) {
           /* 获得拼音词组的首字母(用于缩写匹配) */
           abb += strList.at(i).left(1);
        }
        QList<QPair<QString, QString>> &tmp = m_data[first.left(1)];
        /* 将'拼音(缩写)'和'词组'写入匹配容器 */
        tmp.append(qMakePair(abb, second));
        /* 将'拼音(全拼)'和'词组'写入匹配容器 */
        tmp.append(qMakePair(first.remove(" "), second));
    }
}

  部分词组字库内容预览:

代码语言:javascript
复制
一叶扁舟: yi ye pian zhou
一叶报秋: yi ye bao qiu
一叶知秋: yi ye zhi qiu
一叶落知天下秋: yi ye luo zhi tian xia qiu
一叶迷山: yi ye mi shan
一叶障目: yi ye zhang mu
一号: yi hao
一同: yi tong
一吐为快: yi tu wei kuai
一向: yi xiang
一呵而就: yi he er jiu
一呼再喏: yi hu zai nuo
一呼百应: yi hu bai ying

匹配符合词组的中文(支持缩写)

  取拼音首字母索引,再进行模糊匹配中文词组。

代码语言:javascript
复制
/* 通过获取首字母索引词库内容,用于加快匹配词(组)。*/
const QList<QPair<QString, QString>> &tmp = m_data[text.left(1)];
for (const QPair<QString, QString> &each : tmp) {
    /* 模糊匹配 */
    if (each.first.left(text.count()) != text)
        continue;

    /* 添加到候选栏 */
    addOneItem(each.second);
}

关于更多

  • 公众号Qt君后台回复『Qt键盘』获取系列推送文章。
  • 源码地址:

https://github.com/aeagean/QtKeyboard

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载词组字库
  • 匹配符合词组的中文(支持缩写)
  • 关于更多
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档