fbFillBlankBody.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #include "fbFillBlankBody.h"
  2. #include "ui_fbFillBlankBody.h"
  3. #include <QFile>
  4. #include "CAppInfo.h"
  5. #include "CCommonTools.h"
  6. fbFillBlankBody::fbFillBlankBody(Json::Value jBody, QWidget *parent) :
  7. CBaseWidget(parent),
  8. ui(new Ui::fbFillBlankBody)
  9. {
  10. ui->setupUi(this);
  11. setAttribute(Qt::WA_DeleteOnClose);
  12. m_jBody = jBody;
  13. QFile qssFile(":/qss/main.qss");
  14. qssFile.open(QFile::ReadOnly);
  15. QString qss;
  16. qss = qssFile.readAll();
  17. }
  18. fbFillBlankBody::~fbFillBlankBody()
  19. {
  20. delete ui;
  21. }
  22. int fbFillBlankBody::setUI(const int nWidth)
  23. {
  24. setGeometry(0, 0, nWidth, g_appInfoPtr->m_fRate*300);
  25. ui->tb_questionBody->setGeometry(0, 0, nWidth, g_appInfoPtr->m_fRate*300);
  26. ui->tb_questionBody->setFixedWidth(nWidth);
  27. QTextCursor cursor = ui->tb_questionBody->textCursor();
  28. QTextBlockFormat textStyleFormat = cursor.blockFormat();
  29. // textStyleFormat.setTextIndent(26); //首行缩进
  30. textStyleFormat.setLineHeight(g_appInfoPtr->m_fRate*5, QTextBlockFormat::LineDistanceHeight);
  31. cursor.setBlockFormat(textStyleFormat);
  32. int nBlockNumber = 0;
  33. int nSize = m_jBody["sections"].size();
  34. for(int i = 0; i < nSize; i ++)
  35. {
  36. Json::Value blocks = m_jBody["sections"][i];
  37. for(int j = 0; j < (int)blocks["blocks"].size(); j++)
  38. {
  39. if(blocks["blocks"][j]["type"].asString() == "text")
  40. {
  41. QTextCharFormat fmt;
  42. QFont font;
  43. font.setFamily("Microsoft YaHei");
  44. font.setPixelSize(g_appInfoPtr->m_fRate*16);
  45. font.setWeight(QFont::Medium);
  46. if(blocks["blocks"][j].isMember("param"))
  47. {
  48. if(blocks["blocks"][j]["param"].isMember("font"))
  49. {
  50. if(blocks["blocks"][j]["param"]["font"].isMember("bold"))
  51. {
  52. font.setBold(blocks["blocks"][j]["param"]["font"]["bold"].asBool());
  53. }
  54. if(blocks["blocks"][j]["param"]["font"].isMember("italic"))
  55. {
  56. bool bstyle = blocks["blocks"][j]["param"]["font"]["italic"].asBool();
  57. font.setItalic(bstyle);
  58. }
  59. if(blocks["blocks"][j]["param"]["font"].isMember("underline"))
  60. {
  61. font.setUnderline(blocks["blocks"][j]["param"]["font"]["underline"].asBool());
  62. }
  63. if(blocks["blocks"][j]["param"]["font"].isMember("strikeOut"))
  64. {
  65. font.setStrikeOut(blocks["blocks"][j]["param"]["font"]["strikeOut"].asBool());
  66. }
  67. if(blocks["blocks"][j]["param"]["font"].isMember("size"))
  68. {
  69. font.setPixelSize(blocks["blocks"][j]["param"]["font"]["size"].asInt());
  70. }
  71. if(blocks["blocks"][j]["param"]["font"].isMember("name"))
  72. {
  73. font.setFamily(blocks["blocks"][j]["param"]["font"]["name"].asString().c_str());
  74. }
  75. }
  76. }
  77. QString sText = blocks["blocks"][j]["value"].asString().c_str();
  78. QStringList textList = sText.split("###");
  79. for(int il = 0; il < textList.count(); il++)
  80. {
  81. fmt.setFont(font);
  82. cursor.insertText(textList[il], fmt);
  83. if(il < textList.count() -1)
  84. {
  85. bool bUnderline = font.underline();
  86. font.setUnderline(true);
  87. QBrush br = fmt.foreground();
  88. fmt.setForeground(QColor(0, 122, 255));
  89. fmt.setFont(font);
  90. QString sBlockText = QChar('A' + nBlockNumber);
  91. nBlockNumber++;
  92. cursor.insertText(QString(" %1 ").arg(sBlockText), fmt);
  93. font.setUnderline(bUnderline);
  94. fmt.setForeground(br);
  95. }
  96. }
  97. }
  98. else if(blocks["blocks"][j]["type"].asString() == "image")
  99. {
  100. QString sImage = blocks["blocks"][j]["value"].asString().c_str();
  101. if(!(sImage.startsWith("http") || sImage.startsWith("data:image")))
  102. {
  103. sImage = QString("temp/paper/attachment/") + sImage;
  104. }
  105. if(sImage.startsWith("data:image"))
  106. {
  107. QImage img;
  108. img = QImage::fromData(QByteArray::fromBase64(CCommonTools::getImageRawBase64Str(sImage).toLatin1()));
  109. if(blocks["blocks"][j]["param"].isMember("width") && !QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).isEmpty() &&
  110. !QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).isEmpty())
  111. {
  112. img = img.scaled(QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).toInt(),
  113. QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).toInt(),
  114. Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  115. }
  116. cursor.insertImage(img);
  117. }
  118. else
  119. {
  120. QImage img(sImage);
  121. if(blocks["blocks"][j]["param"].isMember("width") && !QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).isEmpty() &&
  122. !QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).isEmpty())
  123. {
  124. img = img.scaled(QString(blocks["blocks"][j]["param"]["width"].asString().c_str()).toInt(),
  125. QString(blocks["blocks"][j]["param"]["height"].asString().c_str()).toInt(),
  126. Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
  127. }
  128. cursor.insertImage(img);
  129. }
  130. // QString strHtml = "";
  131. // if(blocks["blocks"][j]["param"].isMember("width"))
  132. // {
  133. // strHtml = QString("<img src=\"%1\" height=\"%2\" width=\"%3\" align=\"bottom\" />")
  134. // .arg(blocks["blocks"][j]["value"].asString().c_str())
  135. // .arg(blocks["blocks"][j]["param"]["height"].asString().c_str())
  136. // .arg(blocks["blocks"][j]["param"]["width"].asString().c_str());
  137. // }
  138. // else
  139. // {
  140. // strHtml = "<img src=\"" + QString::fromLocal8Bit(blocks["blocks"][j]["value"].asString().c_str())+"\" align=\"bottom\" />";
  141. //// strHtml = "<img src=\""+QString::fromLocal8Bit(blocks["blocks"][j]["value"].asString().c_str())+"\" align=\"bottom\" />";
  142. // }
  143. // cursor.insertHtml(strHtml);
  144. }
  145. }
  146. if(i < nSize - 1)
  147. {
  148. cursor.insertText("\n");
  149. }
  150. }
  151. ui->tb_questionBody->adjustSize();
  152. ui->tb_questionBody->selectAll();
  153. ui->tb_questionBody->setAlignment(Qt::AlignJustify);
  154. cursor.movePosition(QTextCursor::End);
  155. ui->tb_questionBody->setTextCursor(cursor);
  156. ui->tb_questionBody->setFixedHeight(ui->tb_questionBody->document()->size().height()+g_appInfoPtr->m_fRate*5);
  157. setGeometry(0, 0, nWidth, ui->tb_questionBody->y() + ui->tb_questionBody->height() + g_appInfoPtr->m_fRate*10);
  158. return ui->tb_questionBody->y() + ui->tb_questionBody->height() + g_appInfoPtr->m_fRate*10;
  159. }
  160. int fbFillBlankBody::widgetType()
  161. {
  162. return wt_fillBlankBody;
  163. }
  164. void fbFillBlankBody::setQuesionNo(QString sItemNo)
  165. {
  166. QTextCursor cursor = ui->tb_questionBody->textCursor();
  167. QTextCharFormat fmt;
  168. QFont font;
  169. font.setFamily("Microsoft YaHei");
  170. font.setPixelSize(g_appInfoPtr->m_fRate*16);
  171. font.setWeight(QFont::Medium);
  172. fmt.setFont(font);
  173. cursor.insertText(sItemNo, fmt);
  174. ui->tb_questionBody->setTextCursor(cursor);
  175. }