VisibilityItemDelegate.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "VisibilityItemWidget.hpp"
  2. #include "VisibilityItemDelegate.hpp"
  3. #include <QKeyEvent>
  4. #include "moc_VisibilityItemDelegate.cpp"
  5. VisibilityItemDelegate::VisibilityItemDelegate(QObject *parent) : QStyledItemDelegate(parent) {}
  6. void VisibilityItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
  7. const QModelIndex &index) const
  8. {
  9. QStyledItemDelegate::paint(painter, option, index);
  10. QObject *parentObj = parent();
  11. QListWidget *list = qobject_cast<QListWidget *>(parentObj);
  12. if (!list)
  13. return;
  14. QListWidgetItem *item = list->item(index.row());
  15. VisibilityItemWidget *widget = qobject_cast<VisibilityItemWidget *>(list->itemWidget(item));
  16. if (!widget)
  17. return;
  18. bool selected = option.state.testFlag(QStyle::State_Selected);
  19. bool active = option.state.testFlag(QStyle::State_Active);
  20. QPalette palette = list->palette();
  21. #if defined(_WIN32) || defined(__APPLE__)
  22. QPalette::ColorGroup group = active ? QPalette::Active : QPalette::Inactive;
  23. #else
  24. QPalette::ColorGroup group = QPalette::Active;
  25. #endif
  26. #ifdef _WIN32
  27. QPalette::ColorRole highlightRole = QPalette::WindowText;
  28. #else
  29. QPalette::ColorRole highlightRole = QPalette::HighlightedText;
  30. #endif
  31. QPalette::ColorRole role;
  32. if (selected && active)
  33. role = highlightRole;
  34. else
  35. role = QPalette::WindowText;
  36. widget->SetColor(palette.color(group, role), active, selected);
  37. }
  38. bool VisibilityItemDelegate::eventFilter(QObject *object, QEvent *event)
  39. {
  40. QWidget *editor = qobject_cast<QWidget *>(object);
  41. if (!editor)
  42. return false;
  43. if (event->type() == QEvent::KeyPress) {
  44. QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
  45. if (keyEvent->key() == Qt::Key_Tab || keyEvent->key() == Qt::Key_Backtab) {
  46. return false;
  47. }
  48. }
  49. return QStyledItemDelegate::eventFilter(object, event);
  50. }