123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305 |
- #include "compareitemlistdialog.h"
- #include "ui_compareitemlistwidget.h"
- #include <QWidget>
- #include "compareitemdialog.h"
- #include "UIStyleManager.h"
- #include "CompareItemData.h"
- #include "GlobalInfo.h"
- #include "tipwidget.h"
- #include "warning.h"
- /* 重载比较函数 */
- bool CSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
- {
- // /* 先比较是正常日还是特殊日 */
- // auto leftDay = sourceModel()->data(left, UserRole_WeekDay).toInt();
- // auto rightDay = sourceModel()->data(right, UserRole_WeekDay).toInt();
- // if(leftDay != rightDay)
- // {
- // return leftDay < rightDay; /* 比较周几 */
- // }
- // /* 日期类型相等,再比较时间 */
- // auto leftTime = sourceModel()->data(left, UserRole_Time).toDateTime();
- // auto rightTime = sourceModel()->data(right, UserRole_Time).toDateTime();
- // if(leftDay == static_cast<int>(enum_WeekDay::WeekDay_Special))
- // {
- // /* 特殊日,比较日期和时间 */
- // return leftTime < rightTime;
- // }else {
- // /* 正常日,只比较时间 */
- // return leftTime.time() < rightTime.time();
- // }
- return true;
- }
- CompareItemListDialog::CompareItemListDialog(QWidget *parent) :
- DialogBase(parent),
- ui(new Ui::CompareItemListWidget)
- {
- QWidget *widgetContent = new QWidget(this);
- ui->setupUi(widgetContent);
- /* 设置内容 */
- setContentWidget(widgetContent);
-
- /* 移除底栏 */
- removeBottomWidget();
- /* 设置标题 */
- setTitle("对比项列表", QSize(120, 18));
-
- UIStyle.registerWidget(widgetContent);
- // SPDLOG_LOGGER_DEBUG(m_logger, "ObjectName: {}", widgetContent->objectName().toStdString());
- this->resize(1000 + 40, 800 + 40); /* 设置对话框大小,包含阴影的宽度 */
-
- /* 连接信号和槽 */
- connect(ui->pBtn_close, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_close_Clicked);
- connect(ui->pBtn_add, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_add_Clicked);
- connect(ui->pBtn_delete, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_delete_Clicked);
- connect(ui->pBtn_modify, &QPushButton::clicked, this, &CompareItemListDialog::do_pBtn_edit_Clicked);
- /* 初始化表格 */
- initTable();
- }
- CompareItemListDialog::~CompareItemListDialog()
- {
- UIStyle.unregisterWidget(getContentWidget());
- delete ui;
- }
- /* 设置已有的对比项数据 */
- void CompareItemListDialog::setCompareItemList(const QList<CompareItemTableItem_t>& list)
- {
- for(const CompareItemTableItem_t& item : list)
- {
- /* 添加到表格中 */
- addRow(item);
- }
- }
- /* 点击了关闭按钮 */
- void CompareItemListDialog::do_pBtn_close_Clicked()
- {
- this->close();
- }
- /* 点击了添加按钮 */
- void CompareItemListDialog::do_pBtn_add_Clicked()
- {
- CompareItemDialog dlg;
- /* 设置默认参数 */
- dlg.setDefaultParams(GInfo.getDefaultCompareItem());
- dlg.exec();
- /* 判断是否按下了确定按钮 */
- if(!dlg.isOK())
- {
- return; /* 如果没有按下确定按钮,直接返回 */
- }
- /* 获取对比项信息 */
- CompareItemInfo_t ciInfo = dlg.getCompareItemInfo();
- /* 获取一个未使用的对比项ID */
- int id = CIData.getUnusedCompareItemID();
- /* 添加到全局对比项数据中 */
- ciInfo.nID = id; /* 设置对比项ID */
- CIData.addCompareItem(ciInfo);
- /* 添加到表格中 */
- CompareItemTableItem_t tableItem;
- tableItem.nSerialNum = m_model->rowCount() + 1; /* 序号 */
- tableItem.nID = ciInfo.nID; /* 对比项ID */
- tableItem.strName = ciInfo.strName; /* 对比项名称 */
- tableItem.isEnable = ciInfo.isEnable; /* 对比项状态 */
- tableItem.nChannelCount = ciInfo.listRoads.size(); /* 通道数 */
- addRow(tableItem);
-
- }
- /* 点击了删除按钮 */
- void CompareItemListDialog::do_pBtn_delete_Clicked()
- {
- /* 获取是否有选中的行 */
- QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
- if(selectedRows.isEmpty())
- {
- TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要删除的对比项", this);
- return;
- }
- /* 确认删除 */
- Warning w;
- w.setTitle("删除对比项");
- w.setText("是否确认删除选中的对比项?");
- w.exec();
- if(!w.isOk())
- {
- return; /* 如果没有按下确定按钮,直接返回 */
- }
- /* 删除选中的行 */
- for(const QModelIndex& index : selectedRows)
- {
- /* 获取对比项ID */
- int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
- /* 从全局对比项数据中删除 */
- CIData.removeCompareItem(nID);
- /* 从表格模型中删除 */
- m_model->removeRow(index.row());
- }
- }
- /* 点击了编辑按钮 */
- void CompareItemListDialog::do_pBtn_edit_Clicked()
- {
- /* 获取是否有选中的行 */
- QModelIndexList selectedRows = ui->tableView->selectionModel()->selectedRows();
- if(selectedRows.isEmpty())
- {
- TipWidget::display(TipWidget::OPERATOR_WARN, "请先选择要编辑的对比项", this);
- return;
- }
- /* 只取出第一个 */
- QModelIndex index = selectedRows.first();
- /* 获取对比项ID */
- int nID = m_model->data(m_model->index(index.row(), 0), m_userRole_CompareItemID).toInt();
- /* 查找对比项信息 */
- CompareItemInfo_t ciInfo = CIData.findCompareItemByID(nID);
- if(ciInfo.nID < 0)
- {
- TipWidget::display(TipWidget::OPERATOR_WARN, "对比项不存在,无法编辑", this);
- SPDLOG_LOGGER_WARN(m_logger, "对比项ID {} 不存在,无法编辑", nID);
- return;
- }
- /* 打开对比项编辑对话框 */
- CompareItemDialog dlg;
- /* 设置默认参数 */
- dlg.setDefaultParams(ciInfo);
- dlg.exec();
- /* 判断是否按下了确定按钮 */
- if(!dlg.isOK())
- {
- return; /* 如果没有按下确定按钮,直接返回 */
- }
- /* 获取对比项信息 */
- CompareItemInfo_t newCiInfo = dlg.getCompareItemInfo();
- /* 修改全局对比项数据 */
- if(!CIData.modifyCompareItem(newCiInfo))
- {
- TipWidget::display(TipWidget::OPERATOR_WARN, "对比项修改失败,请稍后重试", this);
- SPDLOG_LOGGER_ERROR(m_logger, "对比项ID {} 修改失败", nID);
- return;
- }
- }
- /* 初始化表格 */
- void CompareItemListDialog::initTable()
- {
- /* 初始化视图模型 */
- m_model = new QStandardItemModel(this);
- m_model->setColumnCount(5);
- /* 设置每一列的标题 */
- m_model->setHeaderData(0, Qt::Horizontal, "序号");
- m_model->setHeaderData(1, Qt::Horizontal, "状态");
- m_model->setHeaderData(2, Qt::Horizontal, "对比项");
- m_model->setHeaderData(3, Qt::Horizontal, "通道数");
- m_model->setHeaderData(4, Qt::Horizontal, "操作");
- // m_model->clear();
- // m_sortModel = new CSortModel(this);
- // m_sortModel->setSourceModel(m_model);
- // m_sortModel->sort(0, Qt::AscendingOrder); /* 默认升序 */
- /* 设置排序数据 */
- // m_sortModel->setSortRole(QtUserRole::UserRole_Time); /* 设置排序角色 */
- ui->tableView->setModel(m_model);
- // 设置选择模式为整行选择
- ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
- ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
- /*--------------------------- 设置横向标题 -------------------------------*/
- /* 设置横向标题可见 */
- ui->tableView->horizontalHeader()->setVisible(true);
- /* 设置标题左对齐 */
- ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
- /* 设置横向标题不可点击 */
- ui->tableView->horizontalHeader()->setSectionsClickable(false);
- /*--------------------------- 设置列 -------------------------------*/
- /* 设置每列的高度 */
- ui->tableView->verticalHeader()->setDefaultSectionSize(48);
- /* 设置横向表头高度为48像素(可根据需要调整) */
- ui->tableView->horizontalHeader()->setFixedHeight(48);
- /* 设置列宽度固定 */
- ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
- /* 去掉列标题 */
- ui->tableView->verticalHeader()->setVisible(false);
- /* 去掉网格线 */
- ui->tableView->setShowGrid(false);
- /* 设置单元格不可编辑 */
- ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
- /* 禁止显示横向滚动条 */
- // ui->tableView->horizontalHeader()->setStretchLastSection(true); /* 设置最后一列拉伸 */
-
- /* 设置固定列宽度 */
- ui->tableView->setColumnWidth(0, 160); /* 第一列宽度 */
- ui->tableView->setColumnWidth(1, 160); /* 第二列宽度 */
- ui->tableView->setColumnWidth(2, 240); /* 第三列宽度 */
- ui->tableView->setColumnWidth(3, 280); /* 第四列宽度 */
- ui->tableView->setColumnWidth(4, 96); /* 第五列宽度 */
- /* 测试用,加入两列数据 */
- // for(int i = 0; i < 10; ++i)
- // {
- // CompareItemTableItem_t item;
- // item.nSerialNum = i + 1; /* 序号 */
- // item.nID = i + 1000; /* 对比项ID */
- // item.strName = QString("对比项%1").arg(i + 1); /* 对比项名称 */
- // item.isEnable = (i % 2 == 0); /* 偶数启用,奇数未启用 */
- // item.nChannelCount = i + 1; /* 通道数 */
- // addRow(item);
- // }
- }
- /* 添加一行 */
- void CompareItemListDialog::addRow(CompareItemTableItem_t tableItem)
- {
- QList<QStandardItem*> items;
- /* 序号 */
- QStandardItem* item0 = new QStandardItem(QString::number(tableItem.nSerialNum));
- item0->setCheckable(true);
- item0->setCheckState(Qt::Unchecked);
- items.append(item0);
- /* 保存这个对比项的ID */
- item0->setData(tableItem.nID, m_userRole_CompareItemID);
- /* 状态 */
- QString status = tableItem.isEnable ? "启用" : "未启用";
- items.append(new QStandardItem(status));
- /* 对比项 */
- items.append(new QStandardItem(tableItem.strName));
- /* 通道数 */
- items.append(new QStandardItem(QString::number(tableItem.nChannelCount)));
- /* 操作 */
- items.append(new QStandardItem("详情"));
- m_model->appendRow(items);
- }
|