123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- #include "buttondelegate.h"
- #include <QPainter>
- #include <QMouseEvent>
- ButtonDelegate::ButtonDelegate(QObject *parent)
- : BaseDelegate(parent)
- {
- }
- void ButtonDelegate::CreateButton(int nCol, QString strBtnText, int nBtnWidth, int nBtnHeight)
- {
- stButtonInfo btnInfo;
- btnInfo.strText = strBtnText;
- btnInfo.nWidth = nBtnWidth;
- btnInfo.nHeight = nBtnHeight;
- m_mapBtnInfo[nCol].append(btnInfo);
- }
- void ButtonDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
- {
- if(!m_mapBtnInfo.contains(index.column()))
- {
- BaseItemDelegate::paint(painter, option, index);
- return;
- }
- QList<int> m_listCol = m_mapBtnInfo.keys();
- for(const int& nCol : qAsConst(m_listCol))
- {
- if(index.column() == nCol)
- {
-
- PaintBase(painter, option, index);
-
- PaintSpecified(painter, option, index);
- QStyleOptionViewItem opt = option;
- initStyleOption(&opt, index);
-
- if(opt.state.testFlag(QStyle::State_Selected))
- {
- painter->fillRect(option.rect, QColor(67, 142, 255, 51));
- }
-
-
- QList<stButtonInfo> listBtnInfo = m_mapBtnInfo.value(nCol);
- for(int i = 0; i < listBtnInfo.size(); ++i)
- {
- painter->save();
-
- QStyleOptionButton buttonOption;
- buttonOption.rect = QRect(option.rect.left() + listBtnInfo[i].nWidth * i,
- option.rect.top(), listBtnInfo[i].nWidth, listBtnInfo[i].nHeight);
- buttonOption.text = listBtnInfo[i].strText;
- buttonOption.state |= QStyle::State_Enabled;
- painter->setBrush(Qt::NoBrush);
- painter->setPen(Qt::transparent);
-
- QColor colorText = QColor("#438EFF");
- QFontMetrics metrics(option.font);
- QRect textRect = metrics.boundingRect(buttonOption.rect, Qt::AlignVCenter | Qt::AlignLeft, buttonOption.text);
- painter->setPen(colorText);
- painter->drawText(textRect, Qt::AlignCenter, buttonOption.text);
- painter->restore();
- }
- }
- }
- }
- bool ButtonDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
- {
- if(!m_mapBtnInfo.contains(index.column()))
- {
- return BaseItemDelegate::editorEvent(event, model, option, index);
- }
- if(event->type() == QEvent::MouseButtonRelease)
- {
- QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
-
- QList<stButtonInfo> listBtnInfo = m_mapBtnInfo.value(index.column());
- for(int i = 0; i < listBtnInfo.size(); ++i)
- {
-
- QRect buttonRect(option.rect.left() + listBtnInfo[i].nWidth * i,
- option.rect.top(),
- listBtnInfo[i].nWidth,
- listBtnInfo[i].nHeight);
-
- if(buttonRect.contains(mouseEvent->pos()))
- {
-
- emit SignalButtonClicked(index, i);
- return true;
- }
- }
- }
- return BaseItemDelegate::editorEvent(event, model, option, index);
- }
|