Overlay.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #include "Overlay.h"
  2. #include <QPainter>
  3. #include <QPen>
  4. #include <QDebug>
  5. #include <QResizeEvent>
  6. Overlay::Overlay(QWidget *parent)
  7. : QWidget(parent)
  8. {
  9. setPalette(Qt::transparent);
  10. setAttribute(Qt::WA_NoSystemBackground);
  11. setAttribute(Qt::WA_TransparentForMouseEvents);
  12. newParent();
  13. }
  14. Overlay::~Overlay()
  15. {
  16. }
  17. void Overlay::paintEvent(QPaintEvent *event)
  18. {
  19. QPainter painter(this);
  20. painter.setRenderHint(QPainter::Antialiasing);
  21. //X
  22. painter.setPen(QPen(Qt::red));
  23. painter.drawLine(width()/8, height()/8, 7*width()/8, 7*height()/8);
  24. painter.drawLine(width()/8, 7*height()/8, 7*width()/8, height()/8);
  25. //Test String
  26. painter.setFont({"arial,helvetica", 48});
  27. painter.drawText(rect(), "TEST 1234", Qt::AlignHCenter | Qt::AlignTop);
  28. qDebug() << "Overlay::paintEvent";
  29. }
  30. void Overlay::resizeEvent ( QResizeEvent * event ) {
  31. QWidget::resizeEvent( event );
  32. qDebug() << "Overlay::resizeEvent old=" << event->oldSize() << " new=" << event->size();
  33. }
  34. void Overlay::newParent()
  35. {
  36. if ( !parent() )
  37. return;
  38. parent()->installEventFilter(this);
  39. raise();
  40. }
  41. bool Overlay::eventFilter(QObject *obj, QEvent *ev)
  42. {
  43. if (obj == parent()) {
  44. if (ev->type() == QEvent::Resize)
  45. resize(static_cast<QResizeEvent*>(ev)->size());
  46. else if (ev->type() == QEvent::ChildAdded)
  47. raise();
  48. }
  49. return QWidget::eventFilter(obj, ev);
  50. }
  51. bool Overlay::event(QEvent *ev)
  52. {
  53. if (ev->type() == QEvent::ParentAboutToChange) {
  54. if ( parent() )
  55. parent()->removeEventFilter(this);
  56. } else {
  57. if (ev->type() == QEvent::ParentChange)
  58. newParent();
  59. }
  60. return QWidget::event(ev);
  61. }
  62. /* =========================== */
  63. MessageOverlay::MessageOverlay(QWidget *parent, const int drawAlignFlags, const QColor &textColor)
  64. : Overlay(parent)
  65. {
  66. m_drawAlignFlags = drawAlignFlags;
  67. m_textColor = textColor;
  68. }
  69. MessageOverlay::~MessageOverlay()
  70. {
  71. }
  72. void MessageOverlay::showMessage(const QString msg, const int forSeconds)
  73. {
  74. m_text = msg;
  75. m_visible = true;
  76. if ( forSeconds > 0 )
  77. QTimer::singleShot(forSeconds * 1000, this, SLOT(hideMessage()));
  78. }
  79. void MessageOverlay::hideMessage()
  80. {
  81. m_visible = false;
  82. update();
  83. }
  84. void MessageOverlay::paintEvent(QPaintEvent *event)
  85. {
  86. QPainter painter(this);
  87. if ( m_visible ) {
  88. painter.setPen(m_textColor);
  89. QFont f;
  90. f.setPointSize(36);
  91. //painter.setFont({"arial,helvetica", 18});
  92. painter.setFont(f);
  93. painter.drawText(rect(), m_drawAlignFlags, m_text);
  94. }
  95. }