selectcard.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. #include "selectcard.h"
  2. #include "ui_selectcard.h"
  3. SelectCard::SelectCard(QWidget* parent) :
  4. QWidget(parent),
  5. ui(new Ui::SelectCard)
  6. {
  7. ui->setupUi(this);
  8. }
  9. SelectCard::~SelectCard()
  10. {
  11. delete ui;
  12. }
  13. void SelectCard::addItem(QString caption, int id)
  14. {
  15. SelectCardItem* item = new SelectCardItem();
  16. item->id = id;
  17. item->caption = caption;
  18. items << item;
  19. update();
  20. }
  21. void SelectCard::setSelected(int id)
  22. {
  23. SelectCardItem* selItem = nullptr;
  24. for (int i = 0; i < items.count(); i++)
  25. {
  26. SelectCardItem* item = items.at(i);
  27. item->selected = item->id == id;
  28. if (item->selected)
  29. {
  30. selItem = item;
  31. }
  32. }
  33. update();
  34. if (selItem != nullptr)
  35. {
  36. emit onSelected(selItem);
  37. }
  38. }
  39. bool SelectCard::hasItemId(int id)
  40. {
  41. for (int i = 0; i < items.count(); i++)
  42. {
  43. SelectCardItem* item = items.at(i);
  44. if (item->id == id)
  45. {
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. void SelectCard::mousePressEvent(QMouseEvent* event)
  52. {
  53. QPoint pt = mapFromGlobal(cursor().pos());
  54. for (int i = 0; i < items.count(); i++)
  55. {
  56. SelectCardItem* item = items.at(i);
  57. if (item->rect.contains(pt))
  58. {
  59. setSelected(item->id);
  60. return;
  61. }
  62. }
  63. }
  64. void SelectCard::updateItemText(int id, QString& s)
  65. {
  66. for (int i = 0; i < items.count(); i++)
  67. {
  68. SelectCardItem* item = items.at(i);
  69. if (item->id == id)
  70. {
  71. item->caption = s;
  72. }
  73. }
  74. update();
  75. }
  76. void SelectCard::deleteItemById(int id)
  77. {
  78. for (int i = 0; i < items.count(); i++)
  79. {
  80. SelectCardItem* item = items.at(i);
  81. if (item->id == id)
  82. {
  83. items.removeAt(i);
  84. delete item;
  85. break;
  86. }
  87. }
  88. update();
  89. }
  90. void SelectCard::paintEvent(QPaintEvent* event)
  91. {
  92. QPainter painter;
  93. painter.begin(this);
  94. int l = 16;
  95. for (int i = 0; i < items.count(); i++)
  96. {
  97. if (i == 0)
  98. {
  99. painter.setPen(QColor(197, 197, 197));
  100. painter.drawLine(0, height(), l, height());
  101. }
  102. SelectCardItem* item = items.at(i);
  103. QFontMetrics fm = painter.fontMetrics();
  104. int w = fm.width(item->caption);
  105. item->rect = QRect(l, 0, w + 32, height());
  106. item->closeRect = QRect();
  107. if (item->selected)
  108. {
  109. painter.fillRect(item->rect, QBrush(QColor(255, 255, 255)));
  110. }
  111. else
  112. {
  113. painter.fillRect(item->rect, QBrush(QColor(237, 237, 237)));
  114. }
  115. //绘制线条
  116. painter.setPen(QColor(197, 197, 197));
  117. painter.drawLine(l, 0, l, height());
  118. painter.setPen(QColor(197, 197, 197));
  119. painter.drawLine(l, 0, l + w + 32, 0);
  120. QRect rc;
  121. rc = QRect(l + 6, 0, w, height());
  122. painter.setPen(QColor(0, 0, 0));
  123. painter.drawText(rc, Qt::AlignCenter, item->caption);
  124. if (item->selected == false)
  125. {
  126. painter.setPen(QColor(197, 197, 197));
  127. painter.drawLine(l, height(), l + w + 32, height());
  128. }
  129. l = l + w + 32;
  130. }
  131. if (items.count() > 0)
  132. {
  133. painter.setPen(QColor(197, 197, 197));
  134. painter.drawLine(l, 0, l, height());
  135. painter.drawLine(l, height(), width(), height());
  136. }
  137. painter.end();
  138. }