importtemplate.cpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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. #include "template.h"
  15. ImportTemplate::ImportTemplate(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. /* 创建阴影 */
  25. QSize size = this->size();
  26. size.setWidth(size.width() - 40);
  27. size.setHeight(size.height() - 40);
  28. auto pShadow = new OneShadowEffect(this);
  29. this->setGraphicsEffect(pShadow);
  30. m_templateName.clear();
  31. /* 设置列数 */
  32. ui->tableWidget->horizontalHeader()->setVisible(true);
  33. ui->tableWidget->setColumnCount(3);
  34. /* 设置列表头 */
  35. QStringList headerList;
  36. headerList << "频率名称" << "模版名称" << "选择";
  37. ui->tableWidget->setHorizontalHeaderLabels(headerList);
  38. ui->tableWidget->horizontalHeader()->setSectionsClickable(false);
  39. ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  40. /* 设置列表头高度 */
  41. ui->tableWidget->horizontalHeader()->setDefaultSectionSize(40);
  42. /* 设置列宽间距,在显示事件中设置 */
  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(40);
  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->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  57. //隐藏网格线
  58. ui->tableWidget->setShowGrid(false);
  59. //隐藏行号
  60. ui->tableWidget->verticalHeader()->setVisible(false);
  61. //设置不显示选中后的虚线
  62. ui->tableWidget->setFocusPolicy(Qt::NoFocus);
  63. //开启排序功能
  64. // ui->tableWidget->setSortingEnabled(true);
  65. connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close()));
  66. connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close()));
  67. connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok()));
  68. /* 注册事件过滤器 */
  69. ui->pBtn_close->installEventFilter(this);
  70. }
  71. ImportTemplate::~ImportTemplate()
  72. {
  73. delete ui;
  74. }
  75. void ImportTemplate::do_ok()
  76. {
  77. /* 获取已选中的模版列表 */
  78. for(auto it : m_listCheckBox)
  79. {
  80. if(it->isChecked())
  81. {
  82. auto chnID = it->property(m_propertyChnID.c_str()).toInt();
  83. auto tmpName = it->property(m_propertytmpName.c_str()).toString();
  84. OneTemplateInfo info;
  85. info.channelInfo.ChannelID = chnID;
  86. info.templateName = tmpName;
  87. m_listTemplate.append(info);
  88. }
  89. }
  90. m_isOk = true;
  91. emit signal_templateName(m_templateName);
  92. this->close();
  93. }
  94. /* 点击了一个checkBox,取消其他同频率的checkBox */
  95. void ImportTemplate::do_checkBox_stateChanged(int state)
  96. {
  97. if(state != Qt::Checked)
  98. {
  99. return;
  100. }
  101. auto checkBox = qobject_cast<QCheckBox*>(sender());
  102. if(checkBox == nullptr)
  103. {
  104. return;
  105. }
  106. auto chnID = checkBox->property(m_propertyChnID.c_str()).toInt();
  107. /* 取消其他同频率的checkBox */
  108. for(auto it : m_listCheckBox)
  109. {
  110. if(it != checkBox && it->property(m_propertyChnID.c_str()).toInt() == chnID)
  111. {
  112. it->setChecked(false);
  113. }
  114. }
  115. }
  116. /* 显示事件 */
  117. void ImportTemplate::showEvent(QShowEvent *event)
  118. {
  119. /* 设置列宽度 */
  120. int width = (ui->tableWidget->width() - 88 - 14) / 2;
  121. ui->tableWidget->setColumnWidth(0, width);
  122. ui->tableWidget->setColumnWidth(1, width);
  123. ui->tableWidget->setColumnWidth(2, 88);
  124. }
  125. /* 设置模版列表 */
  126. void ImportTemplate::setTemplateList(const QMultiMap<int, OneTemplateInfo>& mapTemplate)
  127. {
  128. for(auto it = mapTemplate.begin(), end = mapTemplate.end(); it != end; it++)
  129. {
  130. createRow(it.value());
  131. }
  132. }
  133. /* 获取选中的模板列表 */
  134. QList<OneTemplateInfo>& ImportTemplate::getSelectedTemplateList()
  135. {
  136. return m_listTemplate;
  137. }
  138. /* 设置QSS */
  139. void ImportTemplate::setQSSPath(const QString& qssPath)
  140. {
  141. if(qssPath.isEmpty())
  142. {
  143. return;
  144. }
  145. QString qssFile = qssPath + "/importtemplate.qss";
  146. QFile file(qssFile);
  147. if(file.open(QFile::ReadOnly))
  148. {
  149. QString styleSheet = file.readAll();
  150. this->setStyleSheet(styleSheet);
  151. file.close();
  152. }else
  153. {
  154. LH_WRITE_ERROR(QString("Open %1 failed").arg(qssFile));
  155. }
  156. // if(EPUIStyle.getUIStyle() == enum_UIStyle::UI_Dark)
  157. // {
  158. // /* 手动设置表头的qss */
  159. // ui->tableWidget->horizontalHeader()->setStyleSheet(m_qssHeaderView_dark);
  160. // }else {
  161. // ui->tableWidget->horizontalHeader()->setStyleSheet(m_qssHeaderView_dark);
  162. // }
  163. }
  164. /* 添加一行 */
  165. void ImportTemplate::createRow(const OneTemplateInfo& info)
  166. {
  167. /* 设置表格的行数 */
  168. int row = ui->tableWidget->rowCount();
  169. ui->tableWidget->setRowCount(row + 1);
  170. /* 设置行高 */
  171. ui->tableWidget->setRowHeight(row, 40);
  172. QTableWidgetItem* item0 = new QTableWidgetItem(info.channelInfo.ChannelName);
  173. // item->setData(Qt::DisplayRole, info.channelInfo.ChannelName);
  174. QTableWidgetItem* item1 = new QTableWidgetItem(info.templateName);
  175. ui->tableWidget->setItem(row, 0, item0);
  176. ui->tableWidget->setItem(row, 1, item1);
  177. auto checkBox = new QCheckBox();
  178. checkBox->setProperty(m_propertyChnID.c_str(), info.channelInfo.ChannelID);
  179. checkBox->setProperty(m_propertytmpName.c_str(), info.templateName);
  180. /* 连接信号和槽 */
  181. connect(checkBox, &QCheckBox::stateChanged, this, &ImportTemplate::do_checkBox_stateChanged);
  182. ui->tableWidget->setCellWidget(row, 2, checkBox);
  183. m_listCheckBox.append(checkBox);
  184. }
  185. /* 事件过滤器 */
  186. bool ImportTemplate::eventFilter(QObject *watched, QEvent *event)
  187. {
  188. if(watched == ui->pBtn_close)
  189. {
  190. if(event->type() == QEvent::Enter)
  191. {
  192. ui->pBtn_close->setProperty("Hover", true);
  193. ui->pBtn_close->style()->unpolish(ui->pBtn_close);
  194. ui->pBtn_close->style()->polish(ui->pBtn_close);
  195. return true;
  196. }else if(event->type() == QEvent::Leave)
  197. {
  198. ui->pBtn_close->setProperty("Hover", false);
  199. ui->pBtn_close->style()->unpolish(ui->pBtn_close);
  200. ui->pBtn_close->style()->polish(ui->pBtn_close);
  201. return true;
  202. }
  203. }
  204. return QWidget::eventFilter(watched,event);
  205. }
  206. /* 鼠标点击事件 */
  207. void ImportTemplate::mousePressEvent(QMouseEvent *event)
  208. {
  209. m_lastPos = event->globalPos();
  210. event->accept();
  211. }
  212. /* 鼠标移动事件 */
  213. void ImportTemplate::mouseMoveEvent(QMouseEvent *event)
  214. {
  215. // QRect rect = this->geometry();
  216. // rect.setBottom(rect.top()+50);
  217. auto point = ui->widget_Top->mapToGlobal(QPoint(0, 0));
  218. QRect rect(point, ui->widget_Top->size());
  219. if(!rect.contains(m_lastPos))
  220. {
  221. event->accept();
  222. return;
  223. }
  224. int dx = event->globalX() - m_lastPos.x();
  225. int dy = event->globalY() - m_lastPos.y();
  226. move(x()+dx, y()+dy);
  227. m_lastPos = event->globalPos();
  228. event->accept();
  229. }
  230. /* 鼠标释放事件 */
  231. void ImportTemplate::mouseReleaseEvent(QMouseEvent *event)
  232. {
  233. event->accept();
  234. }