/***************************************************************************
**
** A chinese input method based on Qt 5.x
** Copyright (C) <2014> <xinh>
**
****************************************************************************/
#include <QtCore>
#include <QMessageBox>
#include "pinyininputmethod.h"
#include "mockupinputcontext.h"
//---------------------------------------------------------------------------
CPinyinInputMethod::CPinyinInputMethod()
{
HanziModel.clear();
QDateTime dt = QDateTime::currentDateTime();
QSettings setter(":/pinyin/pinyinEx.ini", QSettings::IniFormat);
key = setter.value("pyKey", key).toStringList();
val = setter.value("pyVal", val).toStringList();
if (key.size() <= 1)
{
QMessageBox::warning( 0, tr("pinyin"), tr("Can't load!") );
return;
}
qDebug() << "time: " << -QDateTime::currentDateTime().msecsTo(dt);
qDebug() << key[key.size()-1] << " : " << val[val.size()-1];
}
//---------------------------------------------------------------------------
CPinyinInputMethod::~CPinyinInputMethod()
{
key.clear();
val.clear();
HanziModel.clear();
}
int CPinyinInputMethod::BinarySearch(const QString &gemfield)
{
int min = 0;
int max = key.size();
int idx = max / 2;
while (true)
{
if (key[idx].startsWith(gemfield))
break;
if (max == min + 1 || max <= min || max == idx + 1 || max == idx || min == idx + 1 || min == idx )
return -1;
if (key[idx] > gemfield)
max = idx;
else
min = idx;
idx = (max + min) / 2;
}
do{
if (--idx < 0)
break;
}while(key[idx].startsWith(gemfield));
return ++idx;
}
//---------------------------------------------------------------------------
void CPinyinInputMethod::Matching(const QString &gemfield )
{
HanziModel.clear();
QString str = gemfield.toLower();
int idx = BinarySearch(str);
if (idx != -1)
{
while(true)
{
if (idx >= key.size())
break;
if (key[idx].startsWith(gemfield))
HanziModel.append(val[idx]);
else
break;
idx++;
}
}
Update();
}
void CPinyinInputMethod::Update()
{
MockupInputContext::d->view->engine()->rootContext()->setContextProperty("hanziModel", HanziModel);
}
//---------------------------------------------------------------------------
qt5虚拟键盘 QPlatformInputContext
4星 · 超过85%的资源 需积分: 44 65 浏览量
2015-01-23
11:16:30
上传
评论 20
收藏 803KB RAR 举报
chenghaoch
- 粉丝: 2
- 资源: 1
最新资源
- 基于 Java的班级管理系统课程设计
- 深入探索Suno AI:教程、元标签与案例分析.pdf
- 超市会员积分管理系统主要用于实现了企业管理数据统计等
- 基于 Java的班级管理系统
- MyBatis 动态 SQL:灵活而强大的查询构建器.pdf
- com.accordion.prettyo.apk
- 毕业设计:基于SSM的mysql-ssm软件bug管理系统(源码 + 数据库 + 说明文档)
- MTSQL8.0.35windows(64bit)-mysql-installer-community-8.0.35.0
- 人工智能引领音乐创作新时代之Suno AI
- Public-bicycle-usage-forecast-master.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
- 6
前往页