Qt中根据拼音搜索汉字的问题

Qt中根据拼音搜索汉字的问题

解决思路:
1  在数据库中增加一个“汉字--拼音”的数据表;
2  在QLineEdit输入框中监听到textChanged时,对于输入的字母进行判断处理:
    1)根据最后一个字母搜索到匹配的汉字;
    2)如果这个是第一个字母,那么根据这些汉字去查询数据结果,如果查询到,则计入内存(Hash表)中;如果不是第一个字母,就要根据前面的内存表再连接这个汉字列表来查询数据结果,如果查询到结果大于0个,则计入内存中。
3  对于内存中已存在的结果,直接匹配数据库,直接查询数据库结果。

注意:如果遇到字符格式问题,请使用toLocal8Bit()方法。


附上根据汉字获取首字母的代码:(参考: http://topic.csdn.net/u/20110627/15/dbb95eda-386d-4309-a482-d56955a5d6cd.html)
QString PinYinHelper::getChineseSpell(QString& src)
{
 unsigned 
char  ucHigh, ucLow;
 
int   nCode;
 QString strPinYin;
 
for  ( int  i = 0 ; i < src.length(); i ++ )
 {
  ucHigh 
=  src[i].unicode();
  
if  (ucHigh  <   0x80  ) // 英文字母
  {
   strPinYin.append(src[i]);
   
continue ;
  }
  ucLow  
=  src[i  +   1 ].unicode();
  
if  ( ucHigh  <   0xa1   ||  ucLow  <   0xa1 )
  {
   
continue ;
  }
  
else
  {
   nCode 
=  (ucHigh  -   0xa0 *   100   +  ucLow  -   0xa0 ;
  }
  strPinYin.append(FirstLetter(nCode));
  i
++ ;
 }
 
return  strPinYin;
}
QString PinYinHelper::FirstLetter(
int  nCode)
{
 
if (nCode  >=   1601   &&  nCode  <   1637 return   " A " ;
 
if (nCode  >=   1637   &&  nCode  <   1833 return   " B " ;
 
if (nCode  >=   1833   &&  nCode  <   2078 return   " C " ;
 
if (nCode  >=   2078   &&  nCode  <   2274 return   " D " ;
 
if (nCode  >=   2274   &&  nCode  <   2302 return   " E " ;
 
if (nCode  >=   2302   &&  nCode  <   2433 return   " F " ;
 
if (nCode  >=   2433   &&  nCode  <   2594 return   " G " ;
 
if (nCode  >=   2594   &&  nCode  <   2787 return   " H " ;
 
if (nCode  >=   2787   &&  nCode  <   3106 return   " J " ;
 
if (nCode  >=   3106   &&  nCode  <   3212 return   " K " ;
 
if (nCode  >=   3212   &&  nCode  <   3472 return   " L " ;
 
if (nCode  >=   3472   &&  nCode  <   3635 return   " M " ;
 
if (nCode  >=   3635   &&  nCode  <   3722 return   " N " ;
 
if (nCode  >=   3722   &&  nCode  <   3730 return   " O " ;
 
if (nCode  >=   3730   &&  nCode  <   3858 return   " P " ;
 
if (nCode  >=   3858   &&  nCode  <   4027 return   " Q " ;
 
if (nCode  >=   4027   &&  nCode  <   4086 return   " R " ;
 
if (nCode  >=   4086   &&  nCode  <   4390 return   " S " ;
 
if (nCode  >=   4390   &&  nCode  <   4558 return   " T " ;
 
if (nCode  >=   4558   &&  nCode  <   4684 return   " W " ;
 
if (nCode  >=   4684   &&  nCode  <   4925 return   " X " ;
 
if (nCode  >=   4925   &&  nCode  <   5249 return   " Y " ;
 
if (nCode  >=   5249   &&  nCode  <   5590 return   " Z " ;
 
return   "" ;
}

你可能感兴趣的:(Qt中根据拼音搜索汉字的问题)