1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #include "vernavbar.h"
- #include "ui_vernavbar.h"
- VerNavBar::VerNavBar(QWidget* parent)
- : QWidget(parent)
- , ui(new Ui::VerNavBar)
- {
- ui->setupUi(this);
- setMouseTracking(true);
- m_seletedItem = nullptr;
- }
- VerNavBar::~VerNavBar()
- {
- delete ui;
- }
- void VerNavBar::addItems(QStringList& captions)
- {
- for (int i = 0; i < captions.count(); i++) {
- SelectionItem* item = new SelectionItem(this);
- item->setCaption(captions[i]);
- m_items << item;
- }
- update();
- }
- SelectionItem* VerNavBar::getItem(const QString& caption)
- {
- for (int i = 0; i < m_items.count(); i++) {
- if (m_items.at(i)->caption() == caption) {
- return m_items.at(i);
- }
- }
- return nullptr;
- }
- void VerNavBar::paintEvent(QPaintEvent* event)
- {
- QPoint pt = mapFromGlobal(cursor().pos());
- QPainter painter;
- painter.begin(this);
- painter.fillRect(rect(), QColor(42, 42, 49));
- int t = 0;
- QFont font = painter.font();
- font.setPixelSize(10);
- #ifdef WIN64
- font.setFamily("微软雅黑");
- #endif
- painter.setFont(font);
- for (int i = 0; i < m_items.count(); i++) {
- SelectionItem* item = m_items.at(i);
- painter.setPen(Qt::white);
- QRect itemRc;
- itemRc.setRect(0, t, width(), 32);
- item->setItemRect(itemRc);
- if ((itemRc.contains(pt)) || (item->selected())) {
- painter.fillRect(itemRc, QColor(19, 24, 36));
- }
- if (item->selected()) {
- painter.setPen(QColor(255, 92, 56));
- } else {
- painter.setPen(Qt::white);
- }
- if (!item->icon().isNull()) {
- QRect iconRect;
- iconRect.setRect(14, t + 14, 8, 8);
- painter.drawPixmap(iconRect, item->icon(), item->icon().rect());
- }
- QRect textRc;
- textRc.setRect(48, t + 13, width() - 48, 10);
- painter.drawText(textRc, Qt::AlignLeft | Qt::AlignVCenter, item->caption());
- t = t + 32;
- }
- painter.end();
- }
- void VerNavBar::mouseMoveEvent(QMouseEvent* event)
- {
- update();
- }
- void VerNavBar::mousePressEvent(QMouseEvent* event)
- {
- QPoint pt = mapFromGlobal(cursor().pos());
- for (int i = 0; i < m_items.count(); i++) {
- SelectionItem* item = m_items.at(i);
- item->setSelected(item->itemRect().contains(pt));
- if (item->selected()) {
- if (item != m_seletedItem) {
- emit onClickItem(item);
- m_seletedItem = item;
- }
- }
- }
- update();
- }
|