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

轻量级Qt键盘-中文输入

作者头像
Qt君
发布2019-09-24 15:57:34
1.5K0
发布2019-09-24 15:57:34
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

在原有的键盘基础上新增中文输入功能。

中文候选栏

中文输入候选栏ChineseWidget使用QListWidget和样式表实现:

setText输入对应拼音字母,即会加载符合的拼音中文。 pressedChanged信号函数即为当按键按下,传递对应的中文。

代码语言:javascript
复制
class ChineseWidget : public QListWidget {
    Q_OBJECT
public:
    ChineseWidget(QWidget *parent = NULL);
    void setText(const QString &text);

signals:
    void pressedChanged(const int &code, const QString &text);
...
};

设置QListWidget:

代码语言:javascript
复制
setFocusPolicy(Qt::NoFocus);
/* 设置为列表显示模式 */
setViewMode(QListView::ListMode);

/* 从左往右排列 */
setFlow(QListView::LeftToRight);

/* 屏蔽水平滑动条 */
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

/* 屏蔽垂直滑动条 */
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

/* 设置为像素滚动 */
setHorizontalScrollMode(QListWidget::ScrollPerPixel);

/* 设置鼠标左键拖动 */
QScroller::grabGesture(this, QScroller::LeftMouseButtonGesture);

/* 设置样式 */
setStyleSheet(R"(
                QListWidget { outline: none; border:1px solid #00000000; color: black; }
                QListWidget::Item { width: 50px; height: 50px; }
                QListWidget::Item:hover { background: #4395ff; color: white; }
                QListWidget::item:selected { background: #4395ff; color: black; }
                QListWidget::item:selected:!active { background: #00000000; color: black; }
              )");

加载中文字库

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

代码语言:javascript
复制
QFile pinyin(":/ChineseLib/PinYin");
if (! pinyin.open(QIODevice::ReadOnly)) {
    qDebug() << "Open pinyin file failed!";
    return;
}

while (! pinyin.atEnd()) {
    QString buf = QString::fromUtf8(pinyin.readLine()).trimmed();
    QRegExp regExp("^[\u4E00-\u9FA5]+");

    int index = regExp.indexIn(buf);
    if (index == -1)
        continue;

    QString first = buf.right(buf.size() - regExp.matchedLength()); // 分离拼音字母
    QString second = buf.mid(index, regExp.matchedLength()); // 分离中文

    QList<QPair<QString, QString>> &tmp = m_data[first.left(1)]; // 取首字母做索引
    tmp.append(qMakePair(first, second));
}

部分字库内容预览:

代码语言:javascript
复制
安a
按a
爱a
阿a
暗a
啊a
埃a
碍a
凹a
奥a
岸a
矮a
案a
俺a

匹配符合拼音的中文

取拼音首字母索引,再匹配中文。

代码语言:javascript
复制
const QList<QPair<QString, QString>> &tmp = m_data[text.left(1)];
for (const QPair<QString, QString> &each : tmp) {
    if (each.first != text) // 匹配是否符合的在容器里面拼音
        continue;

    addOneItem(each.second);
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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