importtemplate.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. #include "importtemplate.h"
  2. #include "ui_importtemplate.h"
  3. #include <QDebug>
  4. #include <QPoint>
  5. #include <QTableWidgetItem>
  6. #include <QFile>
  7. #include <QPainter>
  8. #include <QMouseEvent>
  9. #include "warning/warning.h"
  10. // #include "lhstylemanager.h"
  11. #include "LHQLogAPI.h"
  12. #include "OneShadowEffect.h"
  13. #include "TransmitterSwitchInfo.h"
  14. #include "UIStyleManager.h"
  15. ImportTemplate::ImportTemplate(QMap<QString, int> tabList, int type, QWidget *parent) :
  16. QDialog(parent),
  17. ui(new Ui::ImportTemplate)
  18. {
  19. ui->setupUi(this);
  20. /* 设置隐藏边框 */
  21. this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
  22. /* 设置底层样式表 */
  23. this->setAttribute(Qt::WA_TranslucentBackground);
  24. /* 加载QSS文件 */
  25. // QFile file(":/QSS/QSS/importtemplate_light.qss");
  26. // if(file.open(QFile::ReadOnly))
  27. // {
  28. // QString styleSheet = file.readAll();
  29. // this->setStyleSheet(styleSheet);
  30. // file.close();
  31. // }
  32. /* 创建阴影 */
  33. QSize size = this->size();
  34. size.setWidth(size.width() - 32);
  35. size.setHeight(size.height() - 32);
  36. // m_shadow = new OneShadow(size, 16);
  37. auto pShadow = new OneShadowEffect(this);
  38. this->setGraphicsEffect(pShadow);
  39. m_templateName.clear();
  40. /* 设置列数,列宽、列高、不可编辑、选择一行 */
  41. ui->tableWidget->setColumnCount(3);
  42. //设置行高
  43. ui->tableWidget->verticalHeader()->setDefaultSectionSize(48);
  44. /* 设置最小列宽 */
  45. ui->tableWidget->horizontalHeader()->setMinimumSectionSize(10);
  46. /* 设置列宽间距 */
  47. ui->tableWidget->setColumnWidth(0,46);
  48. ui->tableWidget->setColumnWidth(1,272);
  49. ui->tableWidget->setColumnWidth(2,60);
  50. //设置不可编辑
  51. ui->tableWidget->setEditTriggers(QTableWidget::NoEditTriggers);
  52. //设置选中一行
  53. ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
  54. //设置只能选中一行
  55. ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
  56. //隐藏竖滚动条
  57. ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  58. //隐藏横滚动条
  59. ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  60. //隐藏网格线
  61. ui->tableWidget->setShowGrid(false);
  62. //隐藏行号
  63. ui->tableWidget->verticalHeader()->setVisible(false);
  64. //隐藏列表头
  65. ui->tableWidget->horizontalHeader()->setVisible(false);
  66. //设置不显示选中后的虚线
  67. ui->tableWidget->setFocusPolicy(Qt::NoFocus);
  68. //开启排序功能
  69. // ui->tableWidget->setSortingEnabled(true);
  70. ui->label_warning->hide();
  71. connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close()));
  72. connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close()));
  73. connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok()));
  74. connect(ui->tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(do_seletctRow(int,int)));
  75. m_type = type;
  76. /* 取出当前可用的模版,主要是区分正常日和特殊日 */
  77. QStringList list;
  78. for(auto begin = tabList.begin(); begin != tabList.end(); begin++)
  79. {
  80. // LH_WRITE_LOG_DEBUG(QString("模版名称:%1, 类型:%2").arg(begin.key()).arg(begin.value()));
  81. if(begin.value() != m_type)
  82. {
  83. continue;
  84. }
  85. list.append(begin.key());
  86. }
  87. /* 先设置表格的行数 */
  88. ui->tableWidget->setRowCount(list.count());
  89. for(int i = 0;i < list.count();i++)
  90. {
  91. createRow(i, i + 1, list.at(i));
  92. }
  93. /* 注册事件过滤器 */
  94. ui->pBtn_close->installEventFilter(this);
  95. }
  96. ImportTemplate::~ImportTemplate()
  97. {
  98. delete ui;
  99. }
  100. void ImportTemplate::do_ok()
  101. {
  102. ui->label_warning->hide();
  103. if(m_templateName.isEmpty())
  104. {
  105. ui->label_warning->setText("请选择模版");
  106. ui->label_warning->show();
  107. return;
  108. }
  109. m_isOk = true;
  110. emit signal_templateName(m_templateName);
  111. this->close();
  112. }
  113. /* 选中一行 */
  114. void ImportTemplate::do_seletctRow(int row, int col)
  115. {
  116. if(col == 2)
  117. {
  118. /* 弹出框提示确定要删除 */
  119. std::shared_ptr<Warning> w = std::make_shared<Warning>(this);
  120. w->setQSS(EPUIStyle.getQSSPath());
  121. w->setText("是否删除模板?");
  122. bool flag = false;
  123. connect(w.get(), &Warning::signal_ok,this,[&](){
  124. flag = true;
  125. });
  126. w->exec();
  127. if(!flag)
  128. {
  129. return;
  130. }
  131. emit signal_deleteTemplate(ui->tableWidget->item(row,1)->text());
  132. /* 删除一行 */
  133. ui->tableWidget->removeRow(row);
  134. // LH_WRITE_LOG_DEBUG(QString("剩余模版个数:%1").arg(ui->tableWidget->rowCount()));
  135. /* 对模版重新编号 */
  136. for(int i = 0 ;i < ui->tableWidget->rowCount();i++)
  137. {
  138. ui->tableWidget->item(i,0)->setData(Qt::DisplayRole, i+1);
  139. }
  140. /* 强制重新绘制表格 */
  141. ui->tableWidget->repaint();
  142. }else
  143. {
  144. m_templateName = ui->tableWidget->item(row,1)->text();
  145. }
  146. }
  147. /* 创建一行数据 */
  148. void ImportTemplate::createRow(int row,int num,const QString &text)
  149. {
  150. /* 获取亮色还是暗色 */
  151. bool isDark = (EPUIStyle.getUIStyle() == enum_UIStyle::UI_Dark ? true : false);
  152. QTableWidgetItem* item = new QTableWidgetItem;
  153. item->setData(Qt::DisplayRole,num);
  154. ui->tableWidget->setItem(row,0,item);
  155. item = new QTableWidgetItem(text);
  156. ui->tableWidget->setItem(row,1,item);
  157. item = new QTableWidgetItem("删除");
  158. // item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
  159. if(isDark)
  160. {
  161. item->setForeground(QColor(95, 158, 255));
  162. }else {
  163. item->setForeground(Qt::blue);
  164. }
  165. ui->tableWidget->setItem(row,2,item);
  166. }
  167. /* 设置QSS */
  168. void ImportTemplate::setQSSPath(const QString& qssPath)
  169. {
  170. if(qssPath.isEmpty())
  171. {
  172. return;
  173. }
  174. QString qssFile = qssPath + "/importtemplate.qss";
  175. QFile file(qssFile);
  176. if(file.open(QFile::ReadOnly))
  177. {
  178. QString styleSheet = file.readAll();
  179. this->setStyleSheet(styleSheet);
  180. file.close();
  181. }else
  182. {
  183. LH_WRITE_ERROR(QString("Open %1 failed").arg(qssFile));
  184. }
  185. }
  186. /* 绘画事件 */
  187. // void ImportTemplate::paintEvent(QPaintEvent *event)
  188. // {
  189. // QPainter painter(this);
  190. // painter.setRenderHint(QPainter::Antialiasing);
  191. // painter.drawImage(QPoint(0, 0), m_shadow->image());
  192. // }
  193. /* 事件过滤器 */
  194. bool ImportTemplate::eventFilter(QObject *watched, QEvent *event)
  195. {
  196. if(watched == ui->pBtn_close)
  197. {
  198. if(event->type() == QEvent::Enter)
  199. {
  200. ui->pBtn_close->setProperty("Hover", true);
  201. ui->pBtn_close->style()->unpolish(ui->pBtn_close);
  202. ui->pBtn_close->style()->polish(ui->pBtn_close);
  203. return true;
  204. }else if(event->type() == QEvent::Leave)
  205. {
  206. ui->pBtn_close->setProperty("Hover", false);
  207. ui->pBtn_close->style()->unpolish(ui->pBtn_close);
  208. ui->pBtn_close->style()->polish(ui->pBtn_close);
  209. return true;
  210. }
  211. }
  212. return QWidget::eventFilter(watched,event);
  213. }
  214. /* 鼠标点击事件 */
  215. void ImportTemplate::mousePressEvent(QMouseEvent *event)
  216. {
  217. m_lastPos = event->globalPos();
  218. event->accept();
  219. }
  220. /* 鼠标移动事件 */
  221. void ImportTemplate::mouseMoveEvent(QMouseEvent *event)
  222. {
  223. // QRect rect = this->geometry();
  224. // rect.setBottom(rect.top()+50);
  225. auto point = ui->widget_Top->mapToGlobal(QPoint(0, 0));
  226. QRect rect(point, ui->widget_Top->size());
  227. if(!rect.contains(m_lastPos))
  228. {
  229. event->accept();
  230. return;
  231. }
  232. int dx = event->globalX() - m_lastPos.x();
  233. int dy = event->globalY() - m_lastPos.y();
  234. move(x()+dx, y()+dy);
  235. m_lastPos = event->globalPos();
  236. event->accept();
  237. }
  238. /* 鼠标释放事件 */
  239. void ImportTemplate::mouseReleaseEvent(QMouseEvent *event)
  240. {
  241. event->accept();
  242. }