importtemplate.cpp 7.9 KB

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