compareitemlistdialog.cpp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  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. /* 初始化表格 */
  59. initTable();
  60. UIStyle.registerWidget(widgetContent);
  61. }
  62. CompareItemListDialog::~CompareItemListDialog()
  63. {
  64. UIStyle.unregisterWidget(getContentWidget());
  65. delete ui;
  66. }
  67. /* 设置已有的对比项数据 */
  68. void CompareItemListDialog::setCompareItemList(const QList<CompareItemTableItem_t>& list)
  69. {
  70. for(const CompareItemTableItem_t& item : list)
  71. {
  72. /* 添加到表格中 */
  73. addRow(item);
  74. }
  75. }
  76. /* 点击了关闭按钮 */
  77. void CompareItemListDialog::do_pBtn_close_Clicked()
  78. {
  79. this->close();
  80. }
  81. /* 点击了添加按钮 */
  82. void CompareItemListDialog::do_pBtn_add_Clicked()
  83. {
  84. CompareItemDialog dlg;
  85. /* 设置默认参数 */
  86. dlg.setDefaultParams(GInfo.getDefaultCompareItem());
  87. dlg.exec();
  88. /* 判断是否按下了确定按钮 */
  89. if(!dlg.isOK())
  90. {
  91. return; /* 如果没有按下确定按钮,直接返回 */
  92. }
  93. /* 获取对比项信息 */
  94. CompareItemInfo_t ciInfo = dlg.getCompareItemInfo();
  95. /* 获取一个未使用的对比项ID */
  96. int id = CIData.getUnusedCompareItemID();
  97. /* 添加到全局对比项数据中 */
  98. ciInfo.nID = id; /* 设置对比项ID */
  99. CIData.addCompareItem(ciInfo);
  100. /* 添加到表格中 */
  101. CompareItemTableItem_t tableItem;
  102. tableItem.nSerialNum = m_model->rowCount() + 1; /* 序号 */
  103. tableItem.nID = ciInfo.nID; /* 对比项ID */
  104. tableItem.strName = ciInfo.strName; /* 对比项名称 */
  105. tableItem.isEnable = ciInfo.isEnable; /* 对比项状态 */
  106. tableItem.nChannelCount = ciInfo.mapRoad.size(); /* 通道数 */
  107. addRow(tableItem);
  108. }
  109. /* 点击了删除按钮 */
  110. void CompareItemListDialog::do_pBtn_delete_Clicked()
  111. {
  112. /* 获取是否有选中的行 */
  113. const QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
  114. if(selectedRows.isEmpty())
  115. {
  116. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要删除的对比项", GInfo.getTopWindow());
  117. return;
  118. }
  119. /* 确认删除 */
  120. Warning w;
  121. w.setTitle("删除对比项");
  122. w.setText("是否确认删除选中的对比项?");
  123. w.exec();
  124. if(!w.isOk())
  125. {
  126. return; /* 如果没有按下确定按钮,直接返回 */
  127. }
  128. /* 删除选中的行 */
  129. for(const QModelIndex& index : selectedRows)
  130. {
  131. /* 获取对比项ID */
  132. // int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  133. // int nID = m_model->data(index, m_userRole_CompareItemID).toInt();
  134. int nID = index.data(m_userRole_CompareItemID).toInt();
  135. // SPDLOG_LOGGER_INFO(m_logger, "删除对比项ID: {}", nID);
  136. /* 从全局对比项数据中删除 */
  137. CIData.removeCompareItem(nID);
  138. }
  139. /* 删除表格中的数据,需要倒叙删除,因为 selectedRows 也会继续向 m_model 获取数据 */
  140. for (int i = selectedRows.size() - 1; i >= 0; --i)
  141. {
  142. m_model->removeRow(selectedRows[i].row());
  143. }
  144. // for(const QModelIndex& index : selectedRows)
  145. // {
  146. // /* 获取对比项ID */
  147. // int nID = index.data(m_userRole_CompareItemID).toInt();
  148. // SPDLOG_LOGGER_WARN(m_logger, "删除对比项ID: {}", nID);
  149. // /* 从表格模型中删除 */
  150. // for(int i = 0; i < m_model->rowCount(); ++i)
  151. // {
  152. // if(m_model->data(m_model->index(i, 0), m_userRole_CompareItemID).toInt() == nID)
  153. // {
  154. // m_model->removeRow(i);
  155. // break;
  156. // }
  157. // }
  158. // }
  159. }
  160. /* 点击了编辑按钮 */
  161. void CompareItemListDialog::do_pBtn_edit_Clicked()
  162. {
  163. /* 获取是否有选中的行 */
  164. QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
  165. if(selectedRows.isEmpty())
  166. {
  167. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要编辑的对比项", GInfo.getTopWindow());
  168. return;
  169. }
  170. /* 只取出第一个 */
  171. QModelIndex index = selectedRows.first();
  172. /* 获取对比项ID */
  173. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  174. /* 查找对比项信息 */
  175. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  176. if(ciInfo.nID < 0)
  177. {
  178. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法编辑", GInfo.getTopWindow());
  179. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法编辑", nID);
  180. return;
  181. }
  182. /* 打开对比项编辑对话框 */
  183. CompareItemDialog dlg;
  184. /* 设置默认参数 */
  185. dlg.setDefaultParams(ciInfo);
  186. dlg.exec();
  187. /* 判断是否按下了确定按钮 */
  188. if(!dlg.isOK())
  189. {
  190. return; /* 如果没有按下确定按钮,直接返回 */
  191. }
  192. /* 获取对比项信息 */
  193. CompareItemInfo_t newCiInfo = dlg.getCompareItemInfo();
  194. /* 修改全局对比项数据 */
  195. if(!CIData.modifyCompareItem(newCiInfo))
  196. {
  197. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项修改失败,请稍后重试", GInfo.getTopWindow());
  198. SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 修改失败", nID);
  199. return;
  200. }
  201. /* 判断有没有修改启用状态 */
  202. if(newCiInfo.isEnable != ciInfo.isEnable)
  203. {
  204. /* 如果启用状态有变化,更新表格中的状态 */
  205. m_model->setData(m_model->index(index.row(), 1), newCiInfo.isEnable ? "启用" : "未启用");
  206. }
  207. }
  208. /* 启用对比项 */
  209. void CompareItemListDialog::do_pBtn_enable_Clicked()
  210. {
  211. /* 获取当前选中的行 */
  212. QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
  213. if(selectedRows.isEmpty())
  214. {
  215. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要修改的对比项", GInfo.getTopWindow());
  216. return;
  217. }
  218. for(auto& index : selectedRows)
  219. {
  220. /* 获取对比项ID */
  221. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  222. /* 查找对比项信息 */
  223. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  224. if(ciInfo.nID < 0)
  225. {
  226. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法启用", GInfo.getTopWindow());
  227. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法启用", nID);
  228. return;
  229. }
  230. /* 判断是否已经启用 */
  231. if(ciInfo.isEnable)
  232. {
  233. // TipWidget::display(TipWidget::OPERATOR_OK, "对比项已经处于启用状态", GInfo.getTopWindow());
  234. return; /* 如果已经启用,直接返回 */
  235. }
  236. /* 修改对比项状态为启用 */
  237. ciInfo.isEnable = true;
  238. if(!CIData.modifyCompareItem(ciInfo))
  239. {
  240. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项启用失败,请稍后重试", GInfo.getTopWindow());
  241. SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 启用失败", nID);
  242. return;
  243. }
  244. /* 更新表格中的状态 */
  245. m_model->setData(m_model->index(index.row(), 1), "启用");
  246. }
  247. }
  248. /* 禁用对比项 */
  249. void CompareItemListDialog::do_pBtn_disable_Clicked()
  250. {
  251. /* 获取当前选中的行 */
  252. QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
  253. if(selectedRows.isEmpty())
  254. {
  255. TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要修改的对比项", GInfo.getTopWindow());
  256. return;
  257. }
  258. for(auto& index : selectedRows)
  259. {
  260. /* 获取对比项ID */
  261. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  262. /* 查找对比项信息 */
  263. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  264. if(ciInfo.nID < 0)
  265. {
  266. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法禁用", GInfo.getTopWindow());
  267. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法禁用", nID);
  268. return;
  269. }
  270. /* 判断是否已经启用 */
  271. if(!ciInfo.isEnable)
  272. {
  273. // TipWidget::display(TipWidget::OPERATOR_OK, "对比项已经处于禁用状态", GInfo.getTopWindow());
  274. return;
  275. }
  276. /* 修改对比项状态为启用 */
  277. ciInfo.isEnable = false;
  278. if(!CIData.modifyCompareItem(ciInfo))
  279. {
  280. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项禁用失败,请稍后重试", GInfo.getTopWindow());
  281. SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 禁用失败", nID);
  282. return;
  283. }
  284. /* 更新表格中的状态 */
  285. m_model->setData(m_model->index(index.row(), 1), "未启用");
  286. }
  287. }
  288. /* 显示详情 */
  289. void CompareItemListDialog::do_tableView_doubleClicked(const QModelIndex &index)
  290. {
  291. /* 判断是不是第4列 */
  292. if(index.column() != 4)
  293. {
  294. /* 如果不是第4列,直接返回 */
  295. return;
  296. }
  297. /* 获取对比项ID */
  298. int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
  299. /* 查找对比项信息 */
  300. CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
  301. if(ciInfo.nID < 0)
  302. {
  303. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法查看详情", GInfo.getTopWindow());
  304. SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法查看详情", nID);
  305. return;
  306. }
  307. /* 打开弹窗 */
  308. CompareItemDetailWidget* detailWidget = new CompareItemDetailWidget(GInfo.getTopWindow());
  309. /* 设置对比项信息 */
  310. detailWidget->setCompareItemInfo(ciInfo);
  311. detailWidget->exec();
  312. }
  313. /* 表格点击了一行 */
  314. void CompareItemListDialog::do_tableView_clicked(const QModelIndex &index)
  315. {
  316. if(index.column() == 4)
  317. {
  318. /* 打开对比项详情弹窗 */
  319. do_tableView_doubleClicked(index);
  320. return;
  321. }
  322. // int row = index.row();
  323. // /* 修改第一列状态 */
  324. // bool currentState = m_model->data(m_model->index(row, 0), Qt::CheckStateRole).toBool();
  325. // bool nextState = !currentState;
  326. // m_model->setData(m_model->index(row, 0), nextState, Qt::CheckStateRole);
  327. }
  328. /* 修改了选择行的状态 */
  329. void CompareItemListDialog::do_selectChanged(const QItemSelection &selected, const QItemSelection &deselected)
  330. {
  331. /* 这里获取的是选中的所有单元格数目 */
  332. QModelIndexList selectedRows = selected.indexes();
  333. QModelIndexList deselectedRows = deselected.indexes();
  334. if(selectedRows.isEmpty() && deselectedRows.isEmpty())
  335. {
  336. /* 如果没有选中行,直接返回 */
  337. return;
  338. }
  339. /* 更新第一列的状态 */
  340. for(const QModelIndex& index : selectedRows)
  341. {
  342. // bool currentState = m_model->data(m_model->index(index.row(), 0), Qt::CheckStateRole).toBool();
  343. m_model->setData(m_model->index(index.row(), 0), Qt::Checked, Qt::CheckStateRole);
  344. }
  345. /* 如果有取消选择的行,更新第一列状态 */
  346. for(const QModelIndex& index : deselectedRows)
  347. {
  348. // bool currentState = m_model->data(m_model->index(index.row(), 0), Qt::CheckStateRole).toBool();
  349. m_model->setData(m_model->index(index.row(), 0), Qt::Unchecked, Qt::CheckStateRole);
  350. }
  351. /* 更新标题栏选中的状态,下面获取的才是真正的选中的行 */
  352. int selectedCount = ui->tableView->selectionModel()->selectedRows().size();
  353. Qt::CheckState headerState = Qt::Unchecked;
  354. if(selectedCount == m_model->rowCount())
  355. {
  356. headerState = Qt::CheckState::Checked;
  357. }else if(selectedCount == 0)
  358. {
  359. headerState = Qt::CheckState::Unchecked;
  360. }else {
  361. headerState = Qt::CheckState::PartiallyChecked;
  362. }
  363. // SPDLOG_LOGGER_INFO(m_logger, "选中行数: {}, 总行数: {}, 标题状态: {}", selectedCount, m_model->rowCount(), static_cast<int>(headerState));
  364. /* 如果选中的行数等于总行数,说明全部选中 */
  365. auto header = qobject_cast<BaseHeader*>(ui->tableView->horizontalHeader());
  366. if(header)
  367. {
  368. header->SetChecked(headerState);
  369. }
  370. }
  371. /* 点击了标题栏选择框 */
  372. void CompareItemListDialog::do_headerSelect_clicked(bool state)
  373. {
  374. auto header = qobject_cast<BaseHeader*>(ui->tableView->horizontalHeader());
  375. if(header == nullptr)
  376. {
  377. return;
  378. }
  379. if(state)
  380. {
  381. for(int i = 0; i < m_model->rowCount(); ++i)
  382. {
  383. /* 设置第一列为选中状态 */
  384. m_model->setData(m_model->index(i, 0), Qt::Checked, Qt::CheckStateRole);
  385. ui->tableView->selectionModel()->select(m_model->index(i, 0), QItemSelectionModel::Select | QItemSelectionModel::Rows);
  386. }
  387. }else
  388. {
  389. for(int i = 0; i < m_model->rowCount(); ++i)
  390. {
  391. /* 设置第一列为未选中状态 */
  392. m_model->setData(m_model->index(i, 0), Qt::Unchecked, Qt::CheckStateRole);
  393. ui->tableView->selectionModel()->select(m_model->index(i, 0), QItemSelectionModel::Deselect | QItemSelectionModel::Rows);
  394. }
  395. }
  396. }
  397. /* 初始化表格 */
  398. void CompareItemListDialog::initTable()
  399. {
  400. /* 初始化视图模型 */
  401. m_model = new QStandardItemModel(this);
  402. m_model->setColumnCount(5);
  403. /* 设置每一列的标题 */
  404. m_model->setHeaderData(0, Qt::Horizontal, "序号");
  405. m_model->setHeaderData(1, Qt::Horizontal, "状态");
  406. m_model->setHeaderData(2, Qt::Horizontal, "对比项");
  407. m_model->setHeaderData(3, Qt::Horizontal, "通道数");
  408. m_model->setHeaderData(4, Qt::Horizontal, "操作");
  409. // m_model->clear();
  410. // m_sortModel = new CSortModel(this);
  411. // m_sortModel->setSourceModel(m_model);
  412. // m_sortModel->sort(0, Qt::AscendingOrder); /* 默认升序 */
  413. /* 设置排序数据 */
  414. // m_sortModel->setSortRole(QtUserRole::UserRole_Time); /* 设置排序角色 */
  415. ui->tableView->setModel(m_model);
  416. /* 设置标题头部代理 */
  417. auto oneHeader = new BaseHeader(ui->tableView);
  418. oneHeader->SetCheckable(true);
  419. ui->tableView->setHorizontalHeader(oneHeader);
  420. /* 设置选择属性 */
  421. ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection); /* 可多选 */
  422. ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  423. /* 设置第一列代理 */
  424. auto checkBoxDelegate = new DelegateCheckBox(ui->tableView);
  425. /* 设置多种选择状态 */
  426. ui->tableView->setItemDelegateForColumn(0, checkBoxDelegate);
  427. /*--------------------------- 设置横向标题 -------------------------------*/
  428. /* 设置横向标题可见 */
  429. ui->tableView->horizontalHeader()->setVisible(true);
  430. /* 设置标题左对齐 */
  431. ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
  432. /* 设置横向标题可点击 */
  433. ui->tableView->horizontalHeader()->setSectionsClickable(true);
  434. /*--------------------------- 设置列 -------------------------------*/
  435. /* 设置每列的高度 */
  436. ui->tableView->verticalHeader()->setDefaultSectionSize(48);
  437. /* 设置横向表头高度为48像素(可根据需要调整) */
  438. ui->tableView->horizontalHeader()->setFixedHeight(48);
  439. /* 设置列宽度固定 */
  440. ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
  441. /* 去掉列标题 */
  442. ui->tableView->verticalHeader()->setVisible(false);
  443. /* 去掉网格线 */
  444. ui->tableView->setShowGrid(false);
  445. /* 设置单元格不可编辑 */
  446. ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  447. /* 禁止显示横向滚动条 */
  448. // ui->tableView->horizontalHeader()->setStretchLastSection(true); /* 设置最后一列拉伸 */
  449. /* 设置固定列宽度 */
  450. ui->tableView->setColumnWidth(0, 160); /* 第一列宽度 */
  451. ui->tableView->setColumnWidth(1, 160); /* 第二列宽度 */
  452. ui->tableView->setColumnWidth(2, 240); /* 第三列宽度 */
  453. ui->tableView->setColumnWidth(3, 280); /* 第四列宽度 */
  454. ui->tableView->setColumnWidth(4, 96); /* 第五列宽度 */
  455. /* 连接点击信号 */
  456. // connect(ui->tableView, &QTableView::doubleClicked, this, &CompareItemListDialog::do_tableView_doubleClicked);
  457. connect(ui->tableView, &QTableView::clicked, this, &CompareItemListDialog::do_tableView_clicked);
  458. connect(ui->tableView->selectionModel(), &QItemSelectionModel::selectionChanged,
  459. this, &CompareItemListDialog::do_selectChanged);
  460. connect(oneHeader, &BaseHeader::sig_Checked, this, &CompareItemListDialog::do_headerSelect_clicked);
  461. /* 测试用,加入两列数据 */
  462. // for(int i = 0; i < 10; ++i)
  463. // {
  464. // CompareItemTableItem_t item;
  465. // item.nSerialNum = i + 1; /* 序号 */
  466. // item.nID = i + 1000; /* 对比项ID */
  467. // item.strName = QString("对比项%1").arg(i + 1); /* 对比项名称 */
  468. // item.isEnable = (i % 2 == 0); /* 偶数启用,奇数未启用 */
  469. // item.nChannelCount = i + 1; /* 通道数 */
  470. // addRow(item);
  471. // }
  472. }
  473. /* 添加一行 */
  474. void CompareItemListDialog::addRow(CompareItemTableItem_t tableItem)
  475. {
  476. QList<QStandardItem*> items;
  477. /* -------------------- 序号 -------------------- */
  478. QStandardItem* item0 = new QStandardItem(QString::number(tableItem.nSerialNum));
  479. item0->setCheckable(true);
  480. item0->setCheckState(Qt::Unchecked);
  481. items.append(item0);
  482. /* 保存这个对比项的ID */
  483. item0->setData(tableItem.nID, m_userRole_CompareItemID);
  484. /* -------------------- 状态 -------------------- */
  485. QString status = tableItem.isEnable ? "启用" : "未启用";
  486. items.append(new QStandardItem(status));
  487. /* -------------------- 对比项 -------------------- */
  488. items.append(new QStandardItem(tableItem.strName));
  489. /* -------------------- 通道数 -------------------- */
  490. items.append(new QStandardItem(QString::number(tableItem.nChannelCount)));
  491. /* -------------------- 详情 -------------------- */
  492. QStandardItem* item4 = new QStandardItem("详情");
  493. /* 这个字体设置为蓝色 */
  494. item4->setForeground(QBrush("#438EFF"));
  495. items.append(item4);
  496. m_model->appendRow(items);
  497. }