そのため、ボタンとして使用しているカスタム QLabel クラスがあります。ラベルをクリックすると、背景色が赤から緑に変わります。マウス リリース イベントでは、背景が赤に戻ります。ただし、ウィジェットの「クリック」シグナルにスロットを追加すると、マウス リリース イベントが発生しないように見えます。ラベルは緑色のままです。現時点では、ラベルをクリックすると QMessageBox が表示されるようになっています。ただし、メッセージボックスを閉じた後でも、ラベルは緑色のままです。背景を赤くしたのと同じスロットに focusOutEvent を接続しようとしましたが、まだ機能していません。マウスを離した直後にボタンを赤い背景に戻すにはどうすればよいですか? これが理にかなっていることを願っています。何か案は?
#include "ubtn.h"
QString sty = "ubtn{background:red;}";
QString styd = "ubtn{background:green;}";
QWidget *obj;
ubtn::ubtn(QWidget *parent) :
QLabel(parent)
{
this->setStyleSheet(sty);
connect(this, SIGNAL(onBlur(bool)), SLOT(defaultBtn()));
}
void ubtn::defaultBtn()
{
this->setStyleSheet(sty);
this->repaint();
}
void ubtn::downBtn()
{
this->setStyleSheet(styd);
this->repaint();
}
void ubtn::mousePressEvent(QMouseEvent *ev)
{
downBtn();
emit clicked();
}
void ubtn::mouseReleaseEvent(QMouseEvent *ev)
{
defaultBtn();
}
void ubtn::focusOutEvent(QFocusEvent *e)
{
QLabel::focusOutEvent(e);
emit(onBlur(true));
}