optionBody.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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("bold"))
  40. {
  41. font.setBold(blocks["blocks"][j]["param"]["bold"].asBool());
  42. }
  43. if(blocks["blocks"][j]["param"].isMember("italic"))
  44. {
  45. bool bstyle = blocks["blocks"][j]["param"]["italic"].asBool();
  46. font.setItalic(bstyle);
  47. }
  48. if(blocks["blocks"][j]["param"].isMember("underline"))
  49. {
  50. font.setUnderline(blocks["blocks"][j]["param"]["underline"].asBool());
  51. }
  52. if(blocks["blocks"][j]["param"].isMember("strikeOut"))
  53. {
  54. font.setStrikeOut(blocks["blocks"][j]["param"]["strikeOut"].asBool());
  55. }
  56. if(blocks["blocks"][j]["param"].isMember("size"))
  57. {
  58. font.setPixelSize(blocks["blocks"][j]["param"]["size"].asInt());
  59. }
  60. if(blocks["blocks"][j]["param"].isMember("name"))
  61. {
  62. font.setFamily(blocks["blocks"][j]["param"]["name"].asString().c_str());
  63. }
  64. }
  65. fmt.setFont(font);
  66. cursor.insertText(blocks["blocks"][j]["value"].asString().c_str(), fmt);
  67. }
  68. else if(blocks["blocks"][j]["type"].asString() == "image")
  69. {
  70. QString sImage = blocks["blocks"][j]["value"].asString().c_str();
  71. if(!(sImage.startsWith("http") || sImage.startsWith("data:image")))
  72. {
  73. sImage = QString("temp/paper/attachment/") + sImage;
  74. }
  75. if(sImage.startsWith("data:image"))
  76. {
  77. QImage img;
  78. img = QImage::fromData(QByteArray::fromBase64(CCommonTools::getImageRawBase64Str(sImage).toLatin1()));
  79. if(blocks["blocks"][j]["param"].isMember("width") &&
  80. !QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).isEmpty() &&
  81. !QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).isEmpty())
  82. {
  83. img = img.scaled(QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).toInt(),
  84. QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).toInt(),
  85. Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  86. }
  87. cursor.insertImage(img);
  88. }
  89. else
  90. {
  91. QImage img(sImage);
  92. if(blocks["blocks"][j]["param"].isMember("width"))
  93. {
  94. img = img.scaled(QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).toInt(),
  95. QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).toInt(),
  96. Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  97. }
  98. cursor.insertImage(img);
  99. }
  100. // QString strHtml = "";
  101. // if(blocks["blocks"][j]["param"].isMember("width"))
  102. // {
  103. // strHtml = QString("<img src=\"%1\" height=\"%2\" width=\"%3\" align=\"bottom\" />")
  104. // .arg(blocks["blocks"][j]["value"].asString().c_str())
  105. // .arg(blocks["blocks"][j]["param"]["height"].asString().c_str())
  106. // .arg(blocks["blocks"][j]["param"]["width"].asString().c_str());
  107. // }
  108. // else
  109. // {
  110. // strHtml = "<img src=\""+QString::fromLocal8Bit(blocks["blocks"][j]["value"].asString().c_str())+"\" align=\"bottom\" />";
  111. // }
  112. // cursor.insertHtml(strHtml);
  113. }
  114. }
  115. if(i < nSize - 1)
  116. {
  117. cursor.insertText("\n");
  118. }
  119. }
  120. ui->tb_option->selectAll();
  121. ui->tb_option->setAlignment(Qt::AlignJustify);
  122. ui->tb_option->adjustSize();
  123. cursor.movePosition(QTextCursor::End);
  124. ui->tb_option->setTextCursor(cursor);
  125. ui->tb_option->setFixedHeight(ui->tb_option->document()->size().height()+g_appInfoPtr->m_fRate*7);
  126. setGeometry(0, 0, nWidth, ui->tb_option->y() + ui->tb_option->height() + g_appInfoPtr->m_fRate*7);
  127. return ui->tb_option->y() + ui->tb_option->height() + g_appInfoPtr->m_fRate*7;
  128. }