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

中文候选栏

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

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

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:

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>> >容器中。

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));
}

  部分字库内容预览:

安a
按a
爱a
阿a
暗a
啊a
埃a
碍a
凹a
奥a
岸a
矮a
案a
俺a

匹配符合拼音的中文

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

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);
}

关于更多

  1. 轻量级Qt键盘-介绍篇
  2. 通过索引优化查找性能
  3. 公众号Qt君后台回复『Qt键盘』获取往期推送文章。

轻量级Qt键盘-中文输入相关推荐

  1. 【Qt】Qt Creator中文输入设置

    #[Qt]Qt Creator中文输入设置 一.ubuntu中文输入法的设置 1.在终端中输入: $ ibus-setup 弹出界面如图: 2.选择中文输入法 3.点击右上角设置–>选择系统设置 ...

  2. Android输入法扩展之外接键盘中文输入

    大家想不想要这样一台Android  Surface平板,看着就过瘾吧. 我们知道,android眼下的输入都是通过软键盘实现的,用外接键盘的少.这个在手机上是能够理解的.当手机接上外接键盘后.总体会 ...

  3. 轻量级Qt键盘-更新谷歌汉字库

      收集了近期网友反馈的问题,除了更新谷歌汉字库,还有下列的更新: 添加长按按键重复触发按键的功能: 添加文泉驿字体. 修正了不能输入字符'.'的问题: 优化中文输入卡顿的问题:   可通过设置项目文 ...

  4. 笔划码、五笔码、拼音码软键盘中文输入

    很长时间没来Show一下了,把最近搞的一个软键盘中文输入程序发上来 show一下 一,拼音输入法,模糊输入单字联想. 二,五笔输入,模糊输入单字联想. 三,笔划输入,模糊输入单字联想. 四,特殊字符输 ...

  5. 轻量级Qt键盘-实现篇

    介绍该键盘项目的代码实现. 1.布局 采用垂直布局 QHBoxLayout *h1(); QHBoxLayout *h2(); QHBoxLayout *h3(); QHBoxLayout *h4() ...

  6. ubuntu qt支持中文输入,嵌入式QT支持中文显示.

    1.qt creator支持中文. sudo apt-get install fcitx-frontend-qt5 // 查找安装路径. dpkg -L fcitx-frontend-qt5 //复制 ...

  7. Qt 虚拟键盘实现中文输入

    在不启动Linux图形界面启动运行的应用程序开发,QML应用界面输不了中文,此时使用Qt自带的虚拟键盘可以解决中文输入的需求. 一.Qt 虚拟键盘中文输入法编译安装 安装完Qt开发包,如安装的目录在/ ...

  8. QT 5.7虚拟键盘(支持中文输入)Windows+Ubuntu

    一 Windows下 Qt5.7.1安装虚拟键盘(支持中文输入) 1.环境: windows + qt5.7.1(qt-opensource-windows-x86-mingw530-5.7.1.ex ...

  9. 解决Ubuntu18.04下Qt中无法输入中文的问题

    问题描述:我的中文输入法是搜狗的,但在qt中写代码时一直无法切换成中文,重启无效! 原因:安装的qt中缺少中文输入环境 解决办法: 进入到/usr/lib/x86_64-linux-gnu/qt5/p ...

最新文章

  1. 10 张图打开 CPU 缓存一致性的大门
  2. 目标定位--Deep Self-Taught Learning for Weakly Supervised Object Localization
  3. Java学习之for---each语句
  4. 【ABAP】OO ALV 概述
  5. oracle大对象实例_Oracle解析复杂json的方法实例详解
  6. java 调用 go_实践总结:在 Java 中调用 Go 代码
  7. 人间清醒!哈佛女硕士相亲平台找对象,霸气回应:扩大未来伴侣“候选人”样本!...
  8. 干货|MIT线性代数课程精细笔记6-子空间与零空间
  9. pythonos模块使用技巧大全_Python os模块常用部分功能总结
  10. Hadoop技术内幕:深入解析YARN架构设计与实现原理pdf
  11. 计算机组成原理--Cache主存地址映射 ---课后题4.8
  12. 三极管的导通条件总结
  13. 机器学习——葡萄酒分类问题(输入与输出维度相同)
  14. php filesize stat failed for,PHP filesize()适用于除一个文件之外的所有文件,给出stat失败错误...
  15. unbuntu20.04安装mysql5.7
  16. Python基础教程(第三版)读书笔记(8)
  17. 微信运动怎么打开?如何查看微信运动步数?原来是这样做的…
  18. 软路由自建iptv服务器,LEDE软路由 iPTV 实现任意端口看电视的方法
  19. 日志搜集、过滤及推送处理框架logstash及fluentd总结
  20. Python变量的基本使用

热门文章

  1. [poj 1014]Dividing的DFS解法解读和DP解法
  2. android获取外放设备,Android 监听耳机外放设备
  3. C# FileInfo(System.IO)
  4. 统计学(二)之一般线性模型(一)
  5. spring的几种注入方式
  6. char、varchar、varchar2区别
  7. C语言编程题——杨氏矩阵
  8. 想学3D建模,去哪儿学比较好
  9. 使用Vmware workstation出现权限不足
  10. JPA一:理论知识和入门程序