diff --git a/bitbutton.h b/bitbutton.h --- a/bitbutton.h +++ b/bitbutton.h @@ -36,7 +36,10 @@ void paintEvent(QPaintEvent *event) override; private: + void enterEvent(QEvent * event) override; + void leaveEvent(QEvent * event) override; bool on_; + bool over_; }; #endif diff --git a/bitbutton.cpp b/bitbutton.cpp --- a/bitbutton.cpp +++ b/bitbutton.cpp @@ -28,7 +28,7 @@ // Name: BitButton // Desc: constructor //------------------------------------------------------------------------------ -BitButton::BitButton(QWidget *parent) : QAbstractButton(parent), on_(false) { +BitButton::BitButton(QWidget *parent) : QAbstractButton(parent), on_(false) , over_(false) { // too many bits for tab focus setFocusPolicy(Qt::ClickFocus); @@ -43,6 +43,8 @@ } setFixedSize(size.expandedTo(QApplication::globalStrut())); + + this->setAttribute(Qt::WA_Hover, true); } //------------------------------------------------------------------------------ @@ -63,3 +65,27 @@ on_ = value; update(); } + +//------------------------------------------------------------------------------ +// Name: enterEvent +// Desc: sets to true the "over" variable on Enter event +//------------------------------------------------------------------------------ +void BitButton::enterEvent(QEvent * event) { + + if (event->type() == QEvent::Enter) { + over_ = true; + update(); + } +} + +//------------------------------------------------------------------------------ +// Name: leaveEvent +// Desc: sets to false the "over" variable on Leave event +//------------------------------------------------------------------------------ +void BitButton::leaveEvent(QEvent * event) { + + if (event->type() == QEvent::Leave) { + over_ = false; + update(); + } +} diff --git a/kcalc_bitset.cpp b/kcalc_bitset.cpp --- a/kcalc_bitset.cpp +++ b/kcalc_bitset.cpp @@ -27,6 +27,7 @@ #include #include #include +#include @@ -40,17 +41,26 @@ //------------------------------------------------------------------------------ void BitButton::paintEvent(QPaintEvent *) { + uint8_t alpha = 0x60; QPainter painter(this); - QPen pen(palette().text(), 2); + QPen pen(palette().text(), 1); pen.setJoinStyle(Qt::MiterJoin); painter.setPen(pen); if (on_) { painter.setBrush(palette().text()); + alpha = 0xB0; } else { painter.setBrush(palette().base()); } + if (over_) { + painter.setBrush(QColor(palette().text().color().red(), + palette().text().color().green(), + palette().text().color().blue(), + alpha)); + } + painter.drawRect(rect().adjusted(1, 1, -1, -1)); } @@ -87,6 +97,7 @@ for (int bit = 0; bit < 8; bit++) { BitButton *const tmpBitButton = new BitButton(this); + tmpBitButton->setToolTip(i18n("Bit %1", bitCounter)); wordlayout->addWidget(tmpBitButton); bit_button_group_->addButton(tmpBitButton, bitCounter); bitCounter--;