From 3828bd6f9c24314b7eaf9b07345b780a9b8e2c15 Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Thu, 23 Oct 2025 16:54:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=AD=E6=93=8D=E4=BD=9C=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E7=9A=84=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/alarmEventDataView.h | 17 +++++++ source/alarmEventDataView.cpp | 93 +++++++++++++++++++++++++++++++++-- 2 files changed, 105 insertions(+), 5 deletions(-) diff --git a/include/alarmEventDataView.h b/include/alarmEventDataView.h index 84e62d9..5b6d971 100644 --- a/include/alarmEventDataView.h +++ b/include/alarmEventDataView.h @@ -132,9 +132,26 @@ public: ~AlarmEventDataDelegate(); void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; + bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) override; private: + struct ControlButton + { + QRect rect; + QColor normalBgColor; + QColor hoverBgColor; + QColor pressedBgColor; + QColor borderColor; + QColor textColor; + QFont textFont; + int borderWidth; + int borderRaius; + QString text; + }; + QTableView* m_tableView; + ControlButton m_btnConfirm; + ControlButton m_btnReplay; }; class QVBoxLayout; diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index 33c3822..13d03c7 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -4,6 +4,7 @@ #include #include #include +#include ///////------AlarmEventDataFilter----- AlarmEventDataFilter::AlarmEventDataFilter() @@ -204,7 +205,7 @@ void AlarmEventDataModel::iniHeaderData() m_headerData.emplace_back(SectionData("类型", 150, Type)); m_headerData.emplace_back(SectionData("等级", 150, Severity)); m_headerData.emplace_back(SectionData("确认状态", 150, Status)); - m_headerData.emplace_back(SectionData("操作", 300, Operation)); + m_headerData.emplace_back(SectionData("操作", 172, Operation)); } void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter) @@ -320,7 +321,25 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event) AlarmEventDataDelegate::AlarmEventDataDelegate(QTableView* view, QObject* parent) : QStyledItemDelegate(parent) ,m_tableView(view) -{} +{ + m_btnConfirm.text = QString("确 认"); + m_btnConfirm.textColor = QColor(34, 177, 16); + m_btnConfirm.borderColor = QColor(34, 177, 16); + m_btnConfirm.borderWidth = 1; + m_btnConfirm.borderRaius = 2; + m_btnConfirm.normalBgColor = Qt::transparent; + m_btnConfirm.hoverBgColor = QColor(34, 177, 16, 80); + m_btnConfirm.pressedBgColor = Qt::transparent; + + m_btnReplay.text = QString("回 放"); + m_btnReplay.textColor = QColor(86, 156, 214); + m_btnReplay.borderColor = QColor(86, 156, 214); + m_btnReplay.borderWidth = 1; + m_btnReplay.borderRaius = 2; + m_btnReplay.normalBgColor = Qt::transparent; + m_btnReplay.hoverBgColor = QColor(86, 156, 214, 80); + m_btnReplay.pressedBgColor = Qt::transparent; +} AlarmEventDataDelegate::~AlarmEventDataDelegate() {} @@ -335,9 +354,9 @@ void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem else painter->fillRect(opt.rect, QColor(11, 26, 33, 0)); - //绘制单元格边框(只绘制右边框,每行的最后一个单元格不绘制) if(m_tableView) { + //绘制单元格边框(只绘制右边框,每行的最后一个单元格不绘制) painter->save(); QPen pen(QColor(60,60,60), 1, Qt::DotLine); painter->setPen(pen); @@ -347,10 +366,74 @@ void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem painter->drawLine(opt.rect.topRight(), opt.rect.bottomRight()); } painter->restore(); + + //绘制操作按钮 + if(index.column() == m_tableView->model()->columnCount() - 1) + { + int nMarginH = 10; + int nMarginV = 5; + int nSpacing = 10; + int nBtnWidth = (opt.rect.width() - nMarginH * 2 - nSpacing) * 0.5; + int nBtnHeight = opt.rect.height() - nMarginV * 2; + + /*QStyleOptionButton btnConfirm; + btnConfirm.text = QString("确 认"); + btnConfirm.rect = QRect(opt.rect.left() + nMarginH, opt.rect.top() + nMarginV, nBtnWidth, nBtnHeight); + btnConfirm.state |= QStyle::State_Enabled; + QStyleOptionButton btnReplay; + btnReplay.text = QString("回 放"); + btnReplay.rect = QRect(btnConfirm.rect.right() + nSpacing, opt.rect.top() + nMarginV, nBtnWidth, nBtnHeight); + btnReplay.state |= QStyle::State_Enabled; + + // 绘制按钮 + QApplication::style()->drawControl(QStyle::CE_PushButton, &btnConfirm, painter); + QApplication::style()->drawControl(QStyle::CE_PushButtonLabel, &btnReplay, painter);*/ + + const_cast(this)->m_btnConfirm.rect = QRect(opt.rect.left() + nMarginH, opt.rect.top() + nMarginV, nBtnWidth, nBtnHeight); + const_cast(this)->m_btnReplay.rect = QRect(m_btnConfirm.rect.right() + nSpacing, opt.rect.top() + nMarginV, nBtnWidth, nBtnHeight); + + painter->save(); + + painter->setRenderHint(QPainter::Antialiasing, true); + //绘制‘确认’按钮 + QPen rectPen; + rectPen.setColor(m_btnConfirm.borderColor); + rectPen.setWidth(m_btnConfirm.borderWidth); + painter->setPen(rectPen); + painter->setBrush(m_btnConfirm.normalBgColor); + painter->drawRoundedRect(m_btnConfirm.rect, m_btnConfirm.borderRaius, m_btnConfirm.borderRaius); + painter->setPen(m_btnConfirm.textColor); + painter->drawText(m_btnConfirm.rect, Qt::AlignCenter, m_btnConfirm.text); + //绘制‘回放’按钮 + rectPen.setColor(m_btnReplay.borderColor); + rectPen.setWidth(m_btnReplay.borderWidth); + painter->setPen(rectPen); + painter->setBrush(m_btnReplay.normalBgColor); + painter->drawRoundedRect(m_btnReplay.rect, m_btnReplay.borderRaius, m_btnReplay.borderRaius); + painter->setPen(m_btnReplay.textColor); + painter->drawText(m_btnReplay.rect, Qt::AlignCenter, m_btnReplay.text); + + painter->restore(); + } + } + + if(opt.state.testFlag(QStyle::State_Selected)) + { + //方法1:移除选中状态,防止选中改变文字颜色 + //opt.state &= ~QStyle::State_Selected; + + //方法2 + QColor originalTextColor = opt.palette.color(QPalette::Text); + opt.palette.setColor(QPalette::HighlightedText, originalTextColor); } //绘制默认内容 - QStyledItemDelegate::paint(painter, option, index); + QStyledItemDelegate::paint(painter, opt, index); +} + +bool AlarmEventDataDelegate::editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) +{ + return QStyledItemDelegate::editorEvent(event, model, option, index); } @@ -361,7 +444,7 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent) m_tableView = new QTableView(this); m_tableView->verticalHeader()->setVisible(false); m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); - m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); + //m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows); m_tableView->setShowGrid(false); //m_tableView->setStyleSheet("QHeaderView{background-color: rgb(40, 40, 40);} QHeaderView::section{background-color:transparent;}");