123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #include "selectcard.h"
- #include "ui_selectcard.h"
- SelectCard::SelectCard(QWidget* parent) :
- QWidget(parent),
- ui(new Ui::SelectCard)
- {
- ui->setupUi(this);
- }
- SelectCard::~SelectCard()
- {
- delete ui;
- }
- void SelectCard::addItem(QString caption, int id)
- {
- SelectCardItem* item = new SelectCardItem();
- item->id = id;
- item->caption = caption;
- items << item;
- update();
- }
- void SelectCard::setSelected(int id)
- {
- SelectCardItem* selItem = nullptr;
- for (int i = 0; i < items.count(); i++)
- {
- SelectCardItem* item = items.at(i);
- item->selected = item->id == id;
- if (item->selected)
- {
- selItem = item;
- }
- }
- update();
- if (selItem != nullptr)
- {
- emit onSelected(selItem);
- }
- }
- bool SelectCard::hasItemId(int id)
- {
- for (int i = 0; i < items.count(); i++)
- {
- SelectCardItem* item = items.at(i);
- if (item->id == id)
- {
- return true;
- }
- }
- return false;
- }
- void SelectCard::mousePressEvent(QMouseEvent* event)
- {
- QPoint pt = mapFromGlobal(cursor().pos());
- for (int i = 0; i < items.count(); i++)
- {
- SelectCardItem* item = items.at(i);
- if (item->rect.contains(pt))
- {
- setSelected(item->id);
- return;
- }
- }
- }
- void SelectCard::updateItemText(int id, QString& s)
- {
- for (int i = 0; i < items.count(); i++)
- {
- SelectCardItem* item = items.at(i);
- if (item->id == id)
- {
- item->caption = s;
- }
- }
- update();
- }
- void SelectCard::deleteItemById(int id)
- {
- for (int i = 0; i < items.count(); i++)
- {
- SelectCardItem* item = items.at(i);
- if (item->id == id)
- {
- items.removeAt(i);
- delete item;
- break;
- }
- }
- update();
- }
- void SelectCard::paintEvent(QPaintEvent* event)
- {
- QPainter painter;
- painter.begin(this);
- int l = 16;
- for (int i = 0; i < items.count(); i++)
- {
- if (i == 0)
- {
- painter.setPen(QColor(197, 197, 197));
- painter.drawLine(0, height(), l, height());
- }
- SelectCardItem* item = items.at(i);
- QFontMetrics fm = painter.fontMetrics();
- int w = fm.width(item->caption);
- item->rect = QRect(l, 0, w + 32, height());
- item->closeRect = QRect();
- if (item->selected)
- {
- painter.fillRect(item->rect, QBrush(QColor(255, 255, 255)));
- }
- else
- {
- painter.fillRect(item->rect, QBrush(QColor(237, 237, 237)));
- }
- //绘制线条
- painter.setPen(QColor(197, 197, 197));
- painter.drawLine(l, 0, l, height());
- painter.setPen(QColor(197, 197, 197));
- painter.drawLine(l, 0, l + w + 32, 0);
- QRect rc;
- rc = QRect(l + 6, 0, w, height());
- painter.setPen(QColor(0, 0, 0));
- painter.drawText(rc, Qt::AlignCenter, item->caption);
- if (item->selected == false)
- {
- painter.setPen(QColor(197, 197, 197));
- painter.drawLine(l, height(), l + w + 32, height());
- }
- l = l + w + 32;
- }
- if (items.count() > 0)
- {
- painter.setPen(QColor(197, 197, 197));
- painter.drawLine(l, 0, l, height());
- painter.drawLine(l, height(), width(), height());
- }
- painter.end();
- }
|