fnpinyin.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "fnpinyin.h"
  2. FnPinYin::FnPinYin(QObject *parent) : QObject(parent)
  3. {
  4. }
  5. void FnPinYin::loadData()
  6. {
  7. QFile file(":/api/pinyin/pinyin.json");
  8. file.open(QIODevice::ReadOnly);
  9. QByteArray data=file.readAll();
  10. QJsonDocument jdoc=QJsonDocument::fromJson(data);
  11. QJsonObject jobj=jdoc.object();
  12. QVariantMap jmap=jobj.toVariantMap();
  13. QVariantMap::iterator it=jmap.begin();
  14. for(;it!=jmap.end();it++)
  15. {
  16. QString s=it.key();
  17. s=getFirstLetter(s);
  18. QVariantList values=it.value().toList();
  19. for(auto v:values)
  20. {
  21. m_jianpins.insert(v.toString(),s);
  22. }
  23. }
  24. file.close();
  25. }
  26. QString FnPinYin::getJianPin(QString s)
  27. {
  28. QString ret;
  29. for(int i=0;i<s.length();i++)
  30. {
  31. ret=ret+m_jianpins[s.at(i)];
  32. }
  33. return ret;
  34. }
  35. QString FnPinYin::getFirstLetter(QString s)
  36. {
  37. if (s.length()==0)
  38. {
  39. return "";
  40. }
  41. QString a="āáǎà";
  42. QString o="ōóǒò";
  43. QString e="ēéěè";
  44. QString i="īíǐì";
  45. QString u="ūúǔù";
  46. QString v="ǖǘǚǜ";
  47. QString p=s.left(1);
  48. if (a.indexOf(p)>=0)
  49. {
  50. return "a";
  51. }else
  52. if (o.indexOf(p)>=0)
  53. {
  54. return "o";
  55. }else
  56. if (e.indexOf(p)>=0)
  57. {
  58. return "e";
  59. }if (i.indexOf(p)>=0)
  60. {
  61. return "i";
  62. }
  63. if (u.indexOf(p)>=0)
  64. {
  65. return "u";
  66. }
  67. if (v.indexOf(p)>=0)
  68. {
  69. return "v";
  70. }
  71. else
  72. {
  73. return p;
  74. }
  75. }