optionBody.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "optionBody.h"
  2. #include "ui_optionBody.h"
  3. #include "CAppInfo.h"
  4. #include "CCommonTools.h"
  5. #include "logproc.h"
  6. optionBody::optionBody(Json::Value jBody, QWidget *parent) :
  7. QWidget(parent),
  8. ui(new Ui::optionBody)
  9. {
  10. ui->setupUi(this);
  11. setAttribute(Qt::WA_DeleteOnClose);
  12. m_jBody = jBody;
  13. }
  14. optionBody::~optionBody()
  15. {
  16. delete ui;
  17. }
  18. int optionBody::setUI(const int nWidth)
  19. {
  20. setGeometry(0, 0, nWidth, g_appInfoPtr->m_fRate*300);
  21. ui->tb_option->setGeometry(0, 0, nWidth, g_appInfoPtr->m_fRate*300);
  22. ui->tb_option->setFixedWidth(nWidth);
  23. QTextCursor cursor = ui->tb_option->textCursor();
  24. int nSize = m_jBody["sections"].size();
  25. for(int i = 0; i < nSize; i ++)
  26. {
  27. Json::Value blocks = m_jBody["sections"][i];
  28. for(int j = 0; j < (int)blocks["blocks"].size(); j++)
  29. {
  30. if(blocks["blocks"][j]["type"].asString() == "text")
  31. {
  32. QTextCharFormat fmt;
  33. QFont font;
  34. font.setFamily("Microsoft YaHei");
  35. font.setPixelSize(g_appInfoPtr->m_fRate*14);
  36. font.setWeight(QFont::Normal);
  37. if(blocks["blocks"][j].isMember("param"))
  38. {
  39. if(blocks["blocks"][j]["param"].isMember("font"))
  40. {
  41. if(blocks["blocks"][j]["param"]["font"].isMember("bold"))
  42. {
  43. font.setBold(blocks["blocks"][j]["param"]["font"]["bold"].asBool());
  44. }
  45. if(blocks["blocks"][j]["param"]["font"].isMember("italic"))
  46. {
  47. bool bstyle = blocks["blocks"][j]["param"]["font"]["italic"].asBool();
  48. font.setItalic(bstyle);
  49. }
  50. if(blocks["blocks"][j]["param"]["font"].isMember("underline"))
  51. {
  52. font.setUnderline(blocks["blocks"][j]["param"]["font"]["underline"].asBool());
  53. }
  54. if(blocks["blocks"][j]["param"]["font"].isMember("strikeOut"))
  55. {
  56. font.setStrikeOut(blocks["blocks"][j]["param"]["font"]["strikeOut"].asBool());
  57. }
  58. if(blocks["blocks"][j]["param"]["font"].isMember("size"))
  59. {
  60. font.setPixelSize(blocks["blocks"][j]["param"]["font"]["size"].asInt());
  61. }
  62. if(blocks["blocks"][j]["param"]["font"].isMember("name"))
  63. {
  64. font.setFamily(blocks["blocks"][j]["param"]["font"]["name"].asString().c_str());
  65. }
  66. }
  67. }
  68. fmt.setFont(font);
  69. cursor.insertText(blocks["blocks"][j]["value"].asString().c_str(), fmt);
  70. }
  71. else if(blocks["blocks"][j]["type"].asString() == "image")
  72. {
  73. QString sImage = blocks["blocks"][j]["value"].asString().c_str();
  74. if(!(sImage.startsWith("http") || sImage.startsWith("data:image")))
  75. {
  76. sImage = QString("temp/paper/attachment/") + sImage;
  77. }
  78. if(sImage.startsWith("data:image"))
  79. {
  80. QImage img;
  81. img = QImage::fromData(QByteArray::fromBase64(CCommonTools::getImageRawBase64Str(sImage).toLatin1()));
  82. if(blocks["blocks"][j]["param"].isMember("width") &&
  83. !QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).isEmpty() &&
  84. !QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).isEmpty())
  85. {
  86. img = img.scaled(QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).toInt(),
  87. QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).toInt(),
  88. Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  89. }
  90. cursor.insertImage(img);
  91. }
  92. else
  93. {
  94. QImage img(sImage);
  95. if(blocks["blocks"][j]["param"].isMember("width"))
  96. {
  97. img = img.scaled(QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).toInt(),
  98. QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).toInt(),
  99. Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  100. }
  101. cursor.insertImage(img);
  102. }
  103. // QString strHtml = "";
  104. // if(blocks["blocks"][j]["param"].isMember("width"))
  105. // {
  106. // strHtml = QString("<img src=\"%1\" height=\"%2\" width=\"%3\" align=\"bottom\" />")
  107. // .arg(blocks["blocks"][j]["value"].asString().c_str())
  108. // .arg(blocks["blocks"][j]["param"]["height"].asString().c_str())
  109. // .arg(blocks["blocks"][j]["param"]["width"].asString().c_str());
  110. // }
  111. // else
  112. // {
  113. // strHtml = "<img src=\""+QString::fromLocal8Bit(blocks["blocks"][j]["value"].asString().c_str())+"\" align=\"bottom\" />";
  114. // }
  115. // cursor.insertHtml(strHtml);
  116. }
  117. }
  118. if(i < nSize - 1)
  119. {
  120. cursor.insertText("\n");
  121. }
  122. }
  123. ui->tb_option->selectAll();
  124. ui->tb_option->setAlignment(Qt::AlignJustify);
  125. ui->tb_option->adjustSize();
  126. cursor.movePosition(QTextCursor::End);
  127. ui->tb_option->setTextCursor(cursor);
  128. ui->tb_option->setFixedHeight(ui->tb_option->document()->size().height()+g_appInfoPtr->m_fRate*7);
  129. setGeometry(0, 0, nWidth, ui->tb_option->y() + ui->tb_option->height() + g_appInfoPtr->m_fRate*7);
  130. return ui->tb_option->y() + ui->tb_option->height() + g_appInfoPtr->m_fRate*7;
  131. }