compareitemlistdialog.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646
  1. #include "compareitemlistdialog.h"
  2. #include "ui_compareitemlistwidget.h"
  3. #include <QWidget>
  4. #include "compareitemdialog.h"
  5. #include "UIStyleManager.h"
  6. #include "CompareItemData.h"
  7. #include "GlobalInfo.h"
  8. #include "tipwidget.h"
  9. #include "warning.h"
  10. #include "compareitemdetailwidget.h"
  11. #include "baseheader.h"
  12. #include "DelegateCheckBox.h"
  13. /* 重载比较函数 */
  14. bool CSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
  15. {
  16. // /* 先比较是正常日还是特殊日 */
  17. // auto leftDay = sourceModel()->data(left, UserRole_WeekDay).toInt();
  18. // auto rightDay = sourceModel()->data(right, UserRole_WeekDay).toInt();
  19. // if(leftDay != rightDay)
  20. // {
  21. // return leftDay < rightDay; /* 比较周几 */
  22. // }
  23. // /* 日期类型相等,再比较时间 */
  24. // auto leftTime = sourceModel()->data(left, UserRole_Time).toDateTime();
  25. // auto rightTime = sourceModel()->data(right, UserRole_Time).toDateTime();
  26. // if(leftDay == static_cast<int>(enum_WeekDay::WeekDay_Special))
  27. // {
  28. // /* 特殊日,比较日期和时间 */
  29. // return leftTime < rightTime;
  30. // }else {
  31. // /* 正常日,只比较时间 */
  32. // return leftTime.time() < rightTime.time();
  33. // }
  34. return true;
  35. }
  36. CompareItemListDialog::CompareItemListDialog(QWidget *parent) :
  37. DialogBase(parent),
  38. ui(new Ui::CompareItemListWidget)
  39. {
  40. QWidget *widgetContent = new QWidget(this);
  41. ui->setupUi(widgetContent);
  42. /* 设置内容 */
  43. setContentWidget(widgetContent);
  44. /* 移除底栏 */
  45. removeBottomWidget();
  46. /* 设置标题 */
  47. setTitle("对比项列表", QSize(120, 18));
  48. // UIStyle.registerWidget(widgetContent);
  49. // SPDLOG_LOGGER_DEBUG(m_logger, "ObjectName: {}", widgetContent->objectName().toStdString());
  50. this->resize(1000 + 40, 800 + 40); /* 设置对话框大小,包含阴影的宽度 */
  51. /* 连接信号和槽 */
  52. connect(ui->pBtn_close, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_close_Clicked);
  53. connect(ui->pBtn_add, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_add_Clicked);
  54. connect(ui->pBtn_delete, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_delete_Clicked);
  55. connect(ui->pBtn_modify, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_edit_Clicked);
  56. connect(ui->pBtn_enableCPItem, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_enable_Clicked);
  57. connect(ui->pBtn_disableCPItem, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_disable_Clicked);
  58. /* 设置TableView */
  59. ui->tableView->setParent(nullptr); /* 先移除父对象 */
  60. ui->tableView->deleteLater(); /* 延迟删除 */
  61. ui->tableView = new CTableView(ui->widgetContent);
  62. auto layout = ui->widgetContent->layout();
  63. layout->addWidget(ui->tableView);
  64. /* 初始化表格 */
  65. initTable();
  66. UIStyle.registerWidget(widgetContent);
  67. }
  68. CompareItemListDialog::~CompareItemListDialog()
  69. {
  70. UIStyle.unregisterWidget(getContentWidget());
  71. delete ui;
  72. }
  73. /* 设置已有的对比项数据 */
  74. void CompareItemListDialog::setCompareItemList(const QList<CompareItemTableItem_t>& list)
  75. {
  76. for(const CompareItemTableItem_t& item : list)
  77. {
  78. /* 添加到表格中 */
  79. addRow(item);
  80. }
  81. }
  82. /* 点击了关闭按钮 */
  83. void CompareItemListDialog::do_pBtn_close_Clicked()
  84. {
  85. this->close();
  86. }
  87. /* 点击了添加按钮 */
  88. void CompareItemListDialog::do_pBtn_add_Clicked()
  89. {
  90. /* 获取当前所有的对比项名称 */
  91. QList<QString> listItemNames = CIData.getCompareItemNameList();
  92. CompareItemDialog dlg;
  93. /* 设置默认参数 */
  94. dlg.setDefaultParams(GInfo.getDefaultCompareItem());
  95. /* 设置对比项名称列表 */
  96. dlg.setCompareItemNameList(listItemNames);
  97. dlg.exec();
  98. /* 判断是否按下了确定按钮 */
  99. if(!dlg.isOK())
  100. {
  101. return; /* 如果没有按下确定按钮,直接返回 */
  102. }
  103. /* 获取对比项信息 */
  104. CompareItemInfo_t ciInfo = dlg.getCompareItemInfo();
  105. /* 获取一个未使用的对比项ID */
  106. int id = CIData.getUnusedCompareItemID();
  107. /* 添加到全局对比项数据中 */
  108. ciInfo.nID = id; /* 设置对比项ID */
  109. CIData.addCompareItem(ciInfo);
  110. /* 添加到表格中 */
  111. CompareItemTableItem_t tableItem;
  112. tableItem.nSerialNum = m_model->rowCount() + 1; /* 序号 */
  113. tableItem.nID = ciInfo.nID; /* 对比项ID */
  114. tableItem.strName = ciInfo.strName; /* 对比项名称 */
  115. tableItem.isEnable = ciInfo.isEnable; /* 对比项状态 */
  116. tableItem.nChannelCount = ciInfo.mapRoad.size(); /* 通道数 */
  117. addRow(tableItem);
  118. TipWidget::display(TipWidget::OPERATOR_OK, "对比项新增成功", this);
  119. }
  120. /* 点击了删除按钮 */
  121. void CompareItemListDialog::do_pBtn_delete_Clicked()
  122. {
  123. /* 获取第一列选中的列,以CheckBox选中为准,获取到需要删除的对比项ID */
  124. QList<int> listCheckedID;
  125. for(int i = m_model->rowCount() - 1; i >= 0; --i)
  126. {
  127. bool isChecked = m_model->data(m_model->index(i, 0), Qt::CheckStateRole).toBool();
  128. if(isChecked)
  129. {
  130. int nID = m_model->data(m_model->index(i, 0), m_userRole_CompareItemID).toInt();
  131. listCheckedID.push_back(nID);
  132. }
  133. }
  134. if(listCheckedID.isEmpty())
  135. {
  136. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要删除的对比项", GInfo.getTopWindow());
  137. return;
  138. }
  139. /* 确认删除 */
  140. Warning w;
  141. w.setTitle("删除对比项");
  142. w.setText("是否确认删除选中的对比项?");
  143. w.exec();
  144. if(!w.isOk())
  145. {
  146. return; /* 如果没有按下确定按钮,直接返回 */
  147. }
  148. /* 删除选中的行 */
  149. // for(const QModelIndex& index : selectedRows)
  150. // {
  151. // /* 获取对比项ID */
  152. // // int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  153. // // int nID = m_model->data(index, m_userRole_CompareItemID).toInt();
  154. // int nID = index.data(m_userRole_CompareItemID).toInt();
  155. // // SPDLOG_LOGGER_INFO(m_logger, "删除对比项ID: {}", nID);
  156. // /* 从全局对比项数据中删除 */
  157. // CIData.removeCompareItem(nID);
  158. // }
  159. /* 删除表格中的数据,需要倒叙删除,因为 selectedRows 也会继续向 m_model 获取数据 */
  160. // for (int i = selectedRows.size() - 1; i >= 0; --i)
  161. // {
  162. // m_model->removeRow(selectedRows[i].row());
  163. // }
  164. /* 获取第一列选中的列,以CheckBox选中为准,获取到需要删除的对比项ID */
  165. for(int i = m_model->rowCount() - 1; i >= 0; --i)
  166. {
  167. bool isChecked = m_model->data(m_model->index(i, 0), Qt::CheckStateRole).toBool();
  168. if(isChecked)
  169. {
  170. int nID = m_model->data(m_model->index(i, 0), m_userRole_CompareItemID).toInt();
  171. CIData.removeCompareItem(nID);
  172. m_model->removeRow(i);
  173. }
  174. }
  175. /* 重新排序 */
  176. for(int i = 0; i < m_model->rowCount(); i++)
  177. {
  178. m_model->setData(m_model->index(i, 0), i + 1);
  179. }
  180. }
  181. /* 点击了编辑按钮 */
  182. void CompareItemListDialog::do_pBtn_edit_Clicked()
  183. {
  184. /* 获取第一列选中的列,以CheckBox选中为准,获取到需要删除的对比项ID */
  185. std::map<int, QModelIndex> mapCheckedID;
  186. for(int i = m_model->rowCount() - 1; i >= 0; --i)
  187. {
  188. bool isChecked = m_model->data(m_model->index(i, 0), Qt::CheckStateRole).toBool();
  189. if(isChecked)
  190. {
  191. int nID = m_model->data(m_model->index(i, 0), m_userRole_CompareItemID).toInt();
  192. mapCheckedID[nID] = m_model->index(i, 1);
  193. }
  194. }
  195. if(mapCheckedID.empty())
  196. {
  197. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要编辑的对比项", GInfo.getTopWindow());
  198. return;
  199. }
  200. bool isMultiEdit = false;
  201. if(mapCheckedID.size() == 1)
  202. {
  203. isMultiEdit = false;
  204. }else {
  205. isMultiEdit = true;
  206. }
  207. /* 获取对比项ID */
  208. int nID = mapCheckedID.begin()->first;
  209. /* 查找对比项信息 */
  210. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  211. if(ciInfo.nID < 0)
  212. {
  213. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法编辑", GInfo.getTopWindow());
  214. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法编辑", nID);
  215. return;
  216. }
  217. QList<QString> listItemNames = CIData.getCompareItemNameList();
  218. /* 打开对比项编辑对话框 */
  219. CompareItemDialog dlg;
  220. /* 设置默认参数 */
  221. dlg.setDefaultParams(ciInfo);
  222. dlg.setMultiEditMode(isMultiEdit);
  223. dlg.setCompareItemNameList(listItemNames);
  224. dlg.exec();
  225. /* 判断是否按下了确定按钮 */
  226. if(!dlg.isOK())
  227. {
  228. return; /* 如果没有按下确定按钮,直接返回 */
  229. }
  230. /* 获取对比项信息 */
  231. CompareItemInfo_t newCiInfo = dlg.getCompareItemInfo();
  232. if(isMultiEdit)
  233. {
  234. bool isMainEnabled = newCiInfo.mapRoad[1].isEnableRecord;
  235. bool isSecondEnabled = newCiInfo.mapRoad[2].isEnableRecord;
  236. /* 处理多项编辑,挨个获取对比项信息修改 */
  237. for(auto& pair : mapCheckedID)
  238. {
  239. auto item = CIData.findCompareItemByID(pair.first);
  240. item.mapRoad[1].isEnableRecord = isMainEnabled; /* 主通道是否开启录音 */
  241. item.mapRoad[2].isEnableRecord = isSecondEnabled; /* 第二通道是否开启录音 */
  242. item.setVolumeDetectParams(newCiInfo); /* 修改音量检测参数 */
  243. /* 判断有没有修改启用状态 */
  244. if(newCiInfo.isEnable != item.isEnable)
  245. {
  246. item.isEnable = newCiInfo.isEnable; /* 修改启用状态 */
  247. /* 如果启用状态有变化,更新表格中的状态 */
  248. m_model->setData(pair.second, newCiInfo.isEnable ? "启用" : "未启用");
  249. }
  250. CIData.modifyCompareItem(item);
  251. }
  252. }else
  253. {
  254. /* 修改全局对比项数据 */
  255. if(!CIData.modifyCompareItem(newCiInfo))
  256. {
  257. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项修改失败,请稍后重试", GInfo.getTopWindow());
  258. SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 修改失败", nID);
  259. return;
  260. }
  261. auto index = mapCheckedID.begin()->second;
  262. /* 判断有没有修改启用状态 */
  263. if(newCiInfo.isEnable != ciInfo.isEnable)
  264. {
  265. /* 如果启用状态有变化,更新表格中的状态 */
  266. m_model->setData(index, newCiInfo.isEnable ? "启用" : "未启用");
  267. }
  268. }
  269. }
  270. /* 启用对比项 */
  271. void CompareItemListDialog::do_pBtn_enable_Clicked()
  272. {
  273. /* 获取当前选中的行 */
  274. QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
  275. if(selectedRows.isEmpty())
  276. {
  277. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要修改的对比项", GInfo.getTopWindow());
  278. return;
  279. }
  280. for(auto& index : selectedRows)
  281. {
  282. /* 获取对比项ID */
  283. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  284. /* 查找对比项信息 */
  285. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  286. if(ciInfo.nID < 0)
  287. {
  288. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法启用", GInfo.getTopWindow());
  289. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法启用", nID);
  290. return;
  291. }
  292. /* 判断是否已经启用 */
  293. if(ciInfo.isEnable)
  294. {
  295. // TipWidget::display(TipWidget::OPERATOR_OK, "对比项已经处于启用状态", GInfo.getTopWindow());
  296. return; /* 如果已经启用,直接返回 */
  297. }
  298. /* 修改对比项状态为启用 */
  299. ciInfo.isEnable = true;
  300. if(!CIData.modifyCompareItem(ciInfo))
  301. {
  302. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项启用失败,请稍后重试", GInfo.getTopWindow());
  303. SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 启用失败", nID);
  304. return;
  305. }
  306. /* 更新表格中的状态 */
  307. m_model->setData(m_model->index(index.row(), 1), "启用");
  308. }
  309. }
  310. /* 禁用对比项 */
  311. void CompareItemListDialog::do_pBtn_disable_Clicked()
  312. {
  313. /* 获取当前选中的行 */
  314. QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
  315. if(selectedRows.isEmpty())
  316. {
  317. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要修改的对比项", GInfo.getTopWindow());
  318. return;
  319. }
  320. for(auto& index : selectedRows)
  321. {
  322. /* 获取对比项ID */
  323. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  324. /* 查找对比项信息 */
  325. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  326. if(ciInfo.nID < 0)
  327. {
  328. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法禁用", GInfo.getTopWindow());
  329. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法禁用", nID);
  330. return;
  331. }
  332. /* 判断是否已经启用 */
  333. if(!ciInfo.isEnable)
  334. {
  335. // TipWidget::display(TipWidget::OPERATOR_OK, "对比项已经处于禁用状态", GInfo.getTopWindow());
  336. return;
  337. }
  338. /* 修改对比项状态为启用 */
  339. ciInfo.isEnable = false;
  340. if(!CIData.modifyCompareItem(ciInfo))
  341. {
  342. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项禁用失败,请稍后重试", GInfo.getTopWindow());
  343. SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 禁用失败", nID);
  344. return;
  345. }
  346. /* 更新表格中的状态 */
  347. m_model->setData(m_model->index(index.row(), 1), "未启用");
  348. }
  349. }
  350. /* 显示详情 */
  351. void CompareItemListDialog::do_tableView_doubleClicked(const QModelIndex &index)
  352. {
  353. /* 判断是不是第4列 */
  354. if(index.column() != 4)
  355. {
  356. /* 如果不是第4列,直接返回 */
  357. return;
  358. }
  359. /* 获取对比项ID */
  360. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  361. /* 查找对比项信息 */
  362. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  363. if(ciInfo.nID < 0)
  364. {
  365. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法查看详情", GInfo.getTopWindow());
  366. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法查看详情", nID);
  367. return;
  368. }
  369. /* 打开弹窗 */
  370. CompareItemDetailWidget* detailWidget = new CompareItemDetailWidget(GInfo.getTopWindow());
  371. /* 设置对比项信息 */
  372. detailWidget->setCompareItemInfo(ciInfo);
  373. detailWidget->exec();
  374. }
  375. /* 表格点击了一行 */
  376. void CompareItemListDialog::do_tableView_clicked(const QModelIndex &index)
  377. {
  378. if(index.column() == 4)
  379. {
  380. /* 打开对比项详情弹窗 */
  381. do_tableView_doubleClicked(index);
  382. return;
  383. }
  384. // int row = index.row();
  385. // /* 修改第一列状态 */
  386. // bool currentState = m_model->data(m_model->index(row, 0), Qt::CheckStateRole).toBool();
  387. // bool nextState = !currentState;
  388. // m_model->setData(m_model->index(row, 0), nextState, Qt::CheckStateRole);
  389. }
  390. /* 修改了选择行的状态 */
  391. void CompareItemListDialog::do_selectChanged(const QItemSelection &selected, const QItemSelection &deselected)
  392. {
  393. /* 这里获取的是选中的所有单元格数目 */
  394. QModelIndexList selectedRows = selected.indexes();
  395. QModelIndexList deselectedRows = deselected.indexes();
  396. if(selectedRows.isEmpty() && deselectedRows.isEmpty())
  397. {
  398. /* 如果没有选中行,直接返回 */
  399. return;
  400. }
  401. /* 更新第一列的状态 */
  402. for(const QModelIndex& index : selectedRows)
  403. {
  404. // bool currentState = m_model->data(m_model->index(index.row(), 0), Qt::CheckStateRole).toBool();
  405. m_model->setData(m_model->index(index.row(), 0), Qt::Checked, Qt::CheckStateRole);
  406. }
  407. /* 如果有取消选择的行,更新第一列状态 */
  408. for(const QModelIndex& index : deselectedRows)
  409. {
  410. // bool currentState = m_model->data(m_model->index(index.row(), 0), Qt::CheckStateRole).toBool();
  411. m_model->setData(m_model->index(index.row(), 0), Qt::Unchecked, Qt::CheckStateRole);
  412. }
  413. /* 更新标题栏选中的状态,下面获取的才是真正的选中的行 */
  414. int selectedCount = ui->tableView->selectionModel()->selectedRows().size();
  415. Qt::CheckState headerState = Qt::Unchecked;
  416. if(selectedCount == m_model->rowCount())
  417. {
  418. headerState = Qt::CheckState::Checked;
  419. }else if(selectedCount == 0)
  420. {
  421. headerState = Qt::CheckState::Unchecked;
  422. }else {
  423. headerState = Qt::CheckState::PartiallyChecked;
  424. }
  425. // SPDLOG_LOGGER_INFO(m_logger, "选中行数: {}, 总行数: {}, 标题状态: {}", selectedCount, m_model->rowCount(), static_cast<int>(headerState));
  426. /* 如果选中的行数等于总行数,说明全部选中 */
  427. auto header = qobject_cast<BaseHeader*>(ui->tableView->horizontalHeader());
  428. if(header)
  429. {
  430. header->SetChecked(headerState);
  431. }
  432. }
  433. /* 点击了标题栏选择框 */
  434. void CompareItemListDialog::do_headerSelect_clicked(bool state)
  435. {
  436. auto header = qobject_cast<BaseHeader*>(ui->tableView->horizontalHeader());
  437. if(header == nullptr)
  438. {
  439. return;
  440. }
  441. if(state)
  442. {
  443. for(int i = 0; i < m_model->rowCount(); ++i)
  444. {
  445. /* 设置第一列为选中状态 */
  446. m_model->setData(m_model->index(i, 0), Qt::Checked, Qt::CheckStateRole);
  447. ui->tableView->selectionModel()->select(m_model->index(i, 0), QItemSelectionModel::Select | QItemSelectionModel::Rows);
  448. }
  449. }else
  450. {
  451. for(int i = 0; i < m_model->rowCount(); ++i)
  452. {
  453. /* 设置第一列为未选中状态 */
  454. m_model->setData(m_model->index(i, 0), Qt::Unchecked, Qt::CheckStateRole);
  455. ui->tableView->selectionModel()->select(m_model->index(i, 0), QItemSelectionModel::Deselect | QItemSelectionModel::Rows);
  456. }
  457. }
  458. }
  459. /* 初始化表格 */
  460. void CompareItemListDialog::initTable()
  461. {
  462. /* 初始化视图模型 */
  463. m_model = new QStandardItemModel(this);
  464. m_model->setColumnCount(5);
  465. /* 设置每一列的标题 */
  466. m_model->setHeaderData(0, Qt::Horizontal, "序号");
  467. m_model->setHeaderData(1, Qt::Horizontal, "状态");
  468. m_model->setHeaderData(2, Qt::Horizontal, "对比项");
  469. m_model->setHeaderData(3, Qt::Horizontal, "通道数");
  470. m_model->setHeaderData(4, Qt::Horizontal, "操作");
  471. // m_model->clear();
  472. // m_sortModel = new CSortModel(this);
  473. // m_sortModel->setSourceModel(m_model);
  474. // m_sortModel->sort(0, Qt::AscendingOrder); /* 默认升序 */
  475. /* 设置排序数据 */
  476. // m_sortModel->setSortRole(QtUserRole::UserRole_Time); /* 设置排序角色 */
  477. ui->tableView->setModel(m_model);
  478. /* 设置标题头部代理 */
  479. auto oneHeader = new BaseHeader(ui->tableView);
  480. oneHeader->SetCheckable(true);
  481. ui->tableView->setHorizontalHeader(oneHeader);
  482. /* 设置选择属性 */
  483. ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); /* 可多选 */
  484. ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  485. /* 设置第一列代理 */
  486. auto checkBoxDelegate = new DelegateCheckBox(ui->tableView);
  487. /* 设置多种选择状态 */
  488. ui->tableView->setItemDelegateForColumn(0, checkBoxDelegate);
  489. /*--------------------------- 设置横向标题 -------------------------------*/
  490. /* 设置横向标题可见 */
  491. ui->tableView->horizontalHeader()->setVisible(true);
  492. /* 设置标题左对齐 */
  493. ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  494. /* 设置横向标题可点击 */
  495. ui->tableView->horizontalHeader()->setSectionsClickable(true);
  496. /*--------------------------- 设置列 -------------------------------*/
  497. /* 设置每列的高度 */
  498. ui->tableView->verticalHeader()->setDefaultSectionSize(48);
  499. /* 设置横向表头高度为48像素(可根据需要调整) */
  500. ui->tableView->horizontalHeader()->setFixedHeight(48);
  501. /* 设置列宽度固定 */
  502. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
  503. /* 去掉列标题 */
  504. ui->tableView->verticalHeader()->setVisible(false);
  505. /* 去掉网格线 */
  506. ui->tableView->setShowGrid(false);
  507. /* 设置单元格不可编辑 */
  508. ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  509. /* 禁止显示横向滚动条 */
  510. // ui->tableView->horizontalHeader()->setStretchLastSection(true); /* 设置最后一列拉伸 */
  511. /* 设置固定列宽度 */
  512. ui->tableView->setColumnWidth(0, 160); /* 第一列宽度 */
  513. ui->tableView->setColumnWidth(1, 160); /* 第二列宽度 */
  514. ui->tableView->setColumnWidth(2, 240); /* 第三列宽度 */
  515. ui->tableView->setColumnWidth(3, 280); /* 第四列宽度 */
  516. ui->tableView->setColumnWidth(4, 96); /* 第五列宽度 */
  517. /* 连接点击信号 */
  518. // connect(ui->tableView, &QTableView::doubleClicked, this, &CompareItemListDialog::do_tableView_doubleClicked);
  519. connect(ui->tableView, &QTableView::clicked, this, &CompareItemListDialog::do_tableView_clicked);
  520. connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
  521. this, &CompareItemListDialog::do_selectChanged);
  522. connect(oneHeader, &BaseHeader::sig_Checked, this, &CompareItemListDialog::do_headerSelect_clicked);
  523. /* 测试用,加入两列数据 */
  524. // for(int i = 0; i < 10; ++i)
  525. // {
  526. // CompareItemTableItem_t item;
  527. // item.nSerialNum = i + 1; /* 序号 */
  528. // item.nID = i + 1000; /* 对比项ID */
  529. // item.strName = QString("对比项%1").arg(i + 1); /* 对比项名称 */
  530. // item.isEnable = (i % 2 == 0); /* 偶数启用,奇数未启用 */
  531. // item.nChannelCount = i + 1; /* 通道数 */
  532. // addRow(item);
  533. // }
  534. }
  535. /* 添加一行 */
  536. void CompareItemListDialog::addRow(CompareItemTableItem_t tableItem)
  537. {
  538. QList<QStandardItem*> items;
  539. /* -------------------- 序号 -------------------- */
  540. QStandardItem* item0 = new QStandardItem(QString::number(tableItem.nSerialNum));
  541. item0->setCheckable(true);
  542. item0->setCheckState(Qt::Unchecked);
  543. items.append(item0);
  544. /* 保存这个对比项的ID */
  545. item0->setData(tableItem.nID, m_userRole_CompareItemID);
  546. /* -------------------- 状态 -------------------- */
  547. QString status = tableItem.isEnable ? "启用" : "未启用";
  548. items.append(new QStandardItem(status));
  549. /* -------------------- 对比项 -------------------- */
  550. items.append(new QStandardItem(tableItem.strName));
  551. /* -------------------- 通道数 -------------------- */
  552. items.append(new QStandardItem(QString::number(tableItem.nChannelCount)));
  553. /* -------------------- 详情 -------------------- */
  554. QStandardItem* item4 = new QStandardItem("详情");
  555. /* 这个字体设置为蓝色 */
  556. item4->setForeground(QBrush("#438EFF"));
  557. items.append(item4);
  558. m_model->appendRow(items);
  559. }