savetotemplate.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. #include "savetotemplate.h"
  2. #include "ui_savetotemplate.h"
  3. #include <QStyle>
  4. #include <QFile>
  5. #include <QPainter>
  6. #include <QMouseEvent>
  7. #include "LHQLogAPI.h"
  8. #include "OneShadowEffect.h"
  9. #include "UIStyleManager.h"
  10. SaveToTemplate::SaveToTemplate(QWidget *parent) :
  11. QDialog(parent),
  12. ui(new Ui::SaveToTemplate)
  13. {
  14. ui->setupUi(this);
  15. /* 设置隐藏边框 */
  16. this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
  17. /* 设置底层样式表 */
  18. this->setAttribute(Qt::WA_TranslucentBackground);
  19. /* 创建阴影,这里大小使用最外面的大小减去阴影宽度 */
  20. QSize size = this->size();
  21. size.setWidth(size.width() - 32);
  22. size.setHeight(size.height() - 32);
  23. // m_shadow = new OneShadow(size, 16);
  24. auto pShadow = new OneShadowEffect(this);
  25. this->setGraphicsEffect(pShadow);
  26. /* 设置提示文本 */
  27. // ui->lineEdit->setPlaceholderText("请输入模版名称");
  28. m_placeHolder = "请输入模版名称";
  29. // m_placeHolderColor = QColor("#B1B3B4");
  30. m_list.clear();
  31. ui->label_warn->hide();
  32. /* 限制字数类型 */
  33. ui->lineEdit->setMaxLength(15);
  34. connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close()));
  35. connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close()));
  36. connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok()));
  37. /* 注册事件过滤器 */
  38. ui->pBtn_close->installEventFilter(this);
  39. ui->lineEdit->installEventFilter(this);
  40. }
  41. SaveToTemplate::~SaveToTemplate()
  42. {
  43. delete ui;
  44. }
  45. /* 传入计划项是否为空 */
  46. void SaveToTemplate::setItemEmpty(bool flag)
  47. {
  48. m_itemEmpty = flag;
  49. }
  50. /* 传入所有的模板名称,会进行判断,只传入相同类型的模板名称 */
  51. void SaveToTemplate::setTemplateList(QList<OneTemplateInfo>& list)
  52. {
  53. m_list = list;
  54. // for(auto begin = m_templateNameList.begin(), end = m_templateNameList.end(); begin != end; ++begin)
  55. // {
  56. // LH_WRITE_LOG_DEBUG(QString("模板名称:%1, 类型:%2").arg(begin.key()).arg(begin.value()));
  57. // }
  58. }
  59. /* 获取模板名称 */
  60. QString SaveToTemplate::getTemplateName()
  61. {
  62. return m_templateName;
  63. }
  64. /* 设置QSS */
  65. void SaveToTemplate::setQSS(QString qssPath)
  66. {
  67. QString qssFile = qssPath + "/savetotemplate.qss";
  68. QFile file(qssFile);
  69. if(file.open(QIODevice::ReadOnly))
  70. {
  71. QString stylesheet = file.readAll();
  72. this->setStyleSheet(stylesheet);
  73. file.close();
  74. } else
  75. {
  76. LH_WRITE_ERROR(QString("打开文件失败:%1").arg(file.fileName()));
  77. }
  78. if(EPUIStyle.getUIStyle() == enum_UIStyle::UI_Light)
  79. {
  80. m_placeHolderColor = QColor("#000000");
  81. }else {
  82. m_placeHolderColor = QColor("#B1B3B4");
  83. }
  84. }
  85. void SaveToTemplate::do_ok()
  86. {
  87. m_isOk = false;
  88. m_templateName.clear();
  89. ui->label_warn->hide();
  90. setWarning(false);
  91. /* 检查这一页的项是否为空,不用再这里检查了,在外面检查完成了 */
  92. // if(m_itemEmpty)
  93. // {
  94. // ui->label_warn->setText("当前页没有计划项!");
  95. // ui->label_warn->show();
  96. // setWarning(true);
  97. // return;
  98. // }
  99. /* 检查名称是否是空的 */
  100. m_templateName = ui->lineEdit->text();
  101. if(m_templateName.isEmpty())
  102. {
  103. ui->label_warn->setText("请输入模版名称!");
  104. ui->label_warn->show();
  105. setWarning(true);
  106. return;
  107. }
  108. /* 检查模板名称是否重复 */
  109. bool flag = false;
  110. for(auto begin = m_list.begin(), end = m_list.end(); begin != end; ++begin)
  111. {
  112. if(begin->templateName == m_templateName)
  113. {
  114. flag = true;
  115. break;
  116. }
  117. }
  118. if(flag)
  119. {
  120. ui->label_warn->setText("模版名称重复!");
  121. ui->label_warn->show();
  122. setWarning(true);
  123. return;
  124. }
  125. m_isOk = true;
  126. emit signal_templateName(m_templateName);
  127. this->close();
  128. }
  129. /* 设置报警 */
  130. void SaveToTemplate::setWarning(bool flag)
  131. {
  132. if(flag)
  133. {
  134. ui->lineEdit->setProperty("Warn", true);
  135. }else
  136. {
  137. ui->lineEdit->setProperty("Warn", false);
  138. }
  139. ui->lineEdit->style()->unpolish(ui->lineEdit);
  140. ui->lineEdit->style()->polish(ui->lineEdit);
  141. }
  142. /* 绘画事件 */
  143. // void SaveToTemplate::paintEvent(QPaintEvent *event)
  144. // {
  145. // QPainter painter(this);
  146. // painter.setRenderHint(QPainter::Antialiasing);
  147. // /* 绘制占位符 */
  148. // }
  149. bool SaveToTemplate::eventFilter(QObject *watched, QEvent *event)
  150. {
  151. if(watched == ui->pBtn_close)
  152. {
  153. if(event->type() == QEvent::Enter)
  154. {
  155. ui->pBtn_close->setProperty("Hover", true);
  156. ui->pBtn_close->style()->unpolish(ui->pBtn_close);
  157. ui->pBtn_close->style()->polish(ui->pBtn_close);
  158. return true;
  159. }else if(event->type() == QEvent::Leave)
  160. {
  161. ui->pBtn_close->setProperty("Hover", false);
  162. ui->pBtn_close->style()->unpolish(ui->pBtn_close);
  163. ui->pBtn_close->style()->polish(ui->pBtn_close);
  164. return true;
  165. }
  166. }
  167. else if(watched == ui->lineEdit)
  168. {
  169. /* 绘画事件 */
  170. if(event->type() == QEvent::Paint)
  171. {
  172. if(!m_isInputing && ui->lineEdit->text().isEmpty())
  173. {
  174. // LH_WRITE_LOG("绘制占位符");
  175. /* 设置一输入文本占位符就消失 */
  176. QPainter painter(ui->lineEdit);
  177. painter.setRenderHint(QPainter::Antialiasing);
  178. /* 获取占位符距离左边的距离 */
  179. int left = ui->lineEdit->style()->pixelMetric(QStyle::PM_LayoutLeftMargin, nullptr, ui->lineEdit);
  180. QRect rect = ui->lineEdit->rect();
  181. rect.setLeft(left + 6);
  182. /* 获取占位符字体和颜色 */
  183. QFont font = ui->lineEdit->font();
  184. painter.setFont(font);
  185. // QPalette palette = ui->lineEdit->palette();
  186. painter.setPen(m_placeHolderColor);
  187. /* 绘制占位符 */
  188. painter.drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, m_placeHolder);
  189. }
  190. // m_isInputing = false;
  191. }
  192. else if (event->type() == QEvent::InputMethod)
  193. {
  194. QInputMethodEvent *inputEvent = static_cast<QInputMethodEvent *>(event);
  195. if (!inputEvent->preeditString().isEmpty())
  196. {
  197. // 输入法正在输入
  198. m_isInputing = true;
  199. // LH_WRITE_LOG("输入法正在输入");
  200. }
  201. else
  202. {
  203. // 输入法结束输入
  204. m_isInputing = false;
  205. // LH_WRITE_LOG("输入法结束输入");
  206. }
  207. ui->lineEdit->update(); // 更新界面
  208. }
  209. }
  210. return QWidget::eventFilter(watched,event);
  211. }
  212. /* 鼠标点击事件 */
  213. void SaveToTemplate::mousePressEvent(QMouseEvent *event)
  214. {
  215. m_lastPos = event->globalPos();
  216. event->accept();
  217. }
  218. /* 鼠标移动事件 */
  219. void SaveToTemplate::mouseMoveEvent(QMouseEvent *event)
  220. {
  221. // QRect rect = this->geometry();
  222. // rect.setBottom(rect.top()+50);
  223. auto point = ui->widget_Top->mapToGlobal(QPoint(0, 0));
  224. QRect rect(point, ui->widget_Top->size());
  225. if(!rect.contains(m_lastPos))
  226. {
  227. event->accept();
  228. return;
  229. }
  230. int dx = event->globalX() - m_lastPos.x();
  231. int dy = event->globalY() - m_lastPos.y();
  232. move(x()+dx, y()+dy);
  233. m_lastPos = event->globalPos();
  234. event->accept();
  235. }
  236. /* 鼠标释放事件 */
  237. void SaveToTemplate::mouseReleaseEvent(QMouseEvent *event)
  238. {
  239. event->accept();
  240. }