vernavbar.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "vernavbar.h"
  2. #include "ui_vernavbar.h"
  3. VerNavBar::VerNavBar(QWidget* parent)
  4. : QWidget(parent)
  5. , ui(new Ui::VerNavBar)
  6. {
  7. ui->setupUi(this);
  8. setMouseTracking(true);
  9. m_seletedItem = nullptr;
  10. }
  11. VerNavBar::~VerNavBar()
  12. {
  13. delete ui;
  14. }
  15. void VerNavBar::addItems(QStringList& captions)
  16. {
  17. for (int i = 0; i < captions.count(); i++) {
  18. SelectionItem* item = new SelectionItem(this);
  19. item->setCaption(captions[i]);
  20. m_items << item;
  21. }
  22. update();
  23. }
  24. SelectionItem* VerNavBar::getItem(const QString& caption)
  25. {
  26. for (int i = 0; i < m_items.count(); i++) {
  27. if (m_items.at(i)->caption() == caption) {
  28. return m_items.at(i);
  29. }
  30. }
  31. return nullptr;
  32. }
  33. void VerNavBar::paintEvent(QPaintEvent* event)
  34. {
  35. QPoint pt = mapFromGlobal(cursor().pos());
  36. QPainter painter;
  37. painter.begin(this);
  38. painter.fillRect(rect(), QColor(42, 42, 49));
  39. int t = 0;
  40. QFont font = painter.font();
  41. font.setPixelSize(10);
  42. #ifdef WIN64
  43. font.setFamily("微软雅黑");
  44. #endif
  45. painter.setFont(font);
  46. for (int i = 0; i < m_items.count(); i++) {
  47. SelectionItem* item = m_items.at(i);
  48. painter.setPen(Qt::white);
  49. QRect itemRc;
  50. itemRc.setRect(0, t, width(), 32);
  51. item->setItemRect(itemRc);
  52. if ((itemRc.contains(pt)) || (item->selected())) {
  53. painter.fillRect(itemRc, QColor(19, 24, 36));
  54. }
  55. if (item->selected()) {
  56. painter.setPen(QColor(255, 92, 56));
  57. } else {
  58. painter.setPen(Qt::white);
  59. }
  60. if (!item->icon().isNull()) {
  61. QRect iconRect;
  62. iconRect.setRect(14, t + 14, 8, 8);
  63. painter.drawPixmap(iconRect, item->icon(), item->icon().rect());
  64. }
  65. QRect textRc;
  66. textRc.setRect(48, t + 13, width() - 48, 10);
  67. painter.drawText(textRc, Qt::AlignLeft | Qt::AlignVCenter, item->caption());
  68. t = t + 32;
  69. }
  70. painter.end();
  71. }
  72. void VerNavBar::mouseMoveEvent(QMouseEvent* event)
  73. {
  74. update();
  75. }
  76. void VerNavBar::mousePressEvent(QMouseEvent* event)
  77. {
  78. QPoint pt = mapFromGlobal(cursor().pos());
  79. for (int i = 0; i < m_items.count(); i++) {
  80. SelectionItem* item = m_items.at(i);
  81. item->setSelected(item->itemRect().contains(pt));
  82. if (item->selected()) {
  83. if (item != m_seletedItem) {
  84. emit onClickItem(item);
  85. m_seletedItem = item;
  86. }
  87. }
  88. }
  89. update();
  90. }