C++ 如何使用事件更改QToolButton的透明度?

C++ 如何使用事件更改QToolButton的透明度?,c++,qt,C++,Qt,我用QToolButton创建了一个按钮,并设置了一个图标和一个文本 我想降低按钮背景和图标的不透明度以及文本的不透明度,当光标停留在按钮上时,按钮背景和图标的不透明度以及文本的不透明度都会增加 在下面的代码中,我使用QGraphicsPacityEffect设置按钮的不透明度,该按钮工作正常。为了增加悬停在按钮上时的不透明度,我使用了enterevent,但无法获得结果。我不知道我的车出了什么问题。 如果有人能帮助我,我将不胜感激 dialog.h: #ifndef DIALOG_H #def

我用QToolButton创建了一个按钮,并设置了一个图标和一个文本

我想降低按钮背景和图标的不透明度以及文本的不透明度,当光标停留在按钮上时,按钮背景和图标的不透明度以及文本的不透明度都会增加

在下面的代码中,我使用QGraphicsPacityEffect设置按钮的不透明度,该按钮工作正常。为了增加悬停在按钮上时的不透明度,我使用了enterevent,但无法获得结果。我不知道我的车出了什么问题。 如果有人能帮助我,我将不胜感激

dialog.h:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QToolButton>
#include <QGraphicsOpacityEffect>
#include <QEvent>

namespace Ui {
  class Dialog;
  }

class Dialog : public QDialog
   {
    Q_OBJECT

public:
     explicit Dialog(QWidget *parent = 0);
    ~Dialog();
     QToolButton *butt;
     QGraphicsOpacityEffect *effect;


private:
    Ui::Dialog *ui;

protected:
    bool eventFilter(QObject *obj, QEvent *event) override;
};

#endif // DIALOG_H
dialog.cpp:

 #include "dialog.h"
 #include "ui_dialog.h"
 #include <QDesktopWidget>
 #include <QIcon>
 #include <QPixmap>
 #include <QToolButton>
 #include <QImage>
 #include <QPainter>
 #include <QGraphicsOpacityEffect>
 #include <QDebug>


  Dialog::Dialog(QWidget *parent) :
      QDialog(parent),
     ui(new Ui::Dialog)
 {
  ui->setupUi(this);


QDesktopWidget wid;
int screenWidth = wid.screen()->width();
int screenHeight = wid.screen()->height();

this->setFixedSize(screenWidth/2.5,screenHeight/1.5);

int widthW = this->frameGeometry().width();
int heightW = this->frameGeometry().height();
//qDebug() << widthW;
//qDebug() << heightW;
this->setGeometry((screenWidth/2)-(widthW/2),(screenHeight/2)-(heightW/2),widthW,heightW);

butt= new QToolButton(this);
butt->setFixedSize(widthW/2.5,heightW/2.5);
int width_button_EM = butt->frameGeometry().width();
int height_buttin_EM = butt->frameGeometry().height();
butt->setGeometry(widthW*50/100,heightW*20/100,width_button_EM,height_buttin_EM);



butt->setObjectName("butt-name");
butt->setStyleSheet(

"QToolButton#butt-name {"
    "border:5px solid #303030;"
    "border-width: 3px;"
    " }"
" QToolButton#butt-name {"
    "  border-radius: 0px;"
    " }"

"QToolButton#butt-name {"
    "padding-left:5px; padding-right:5px; padding-bottom:5px;  padding-top:5px;"
   "}"
    );




QImage image;
image.load("F:/qt codes/opacity4/2-2");

image = image.convertToFormat(QImage::Format_ARGB32);

QPainter painter(&image);
painter.setOpacity(0.5);

QPixmap pixmap = QPixmap::fromImage(image);
QIcon icon(pixmap);
butt->setIcon(icon);
butt->setIconSize(QSize(widthW/2,heightW/3.3));
butt->setText("my book");
butt->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
butt->setCursor(Qt::PointingHandCursor);


effect = new QGraphicsOpacityEffect(this);
effect->setOpacity(0.5);
butt->setGraphicsEffect(effect);

//butt->setAttribute(Qt::WA_Hover, true);
butt->setMouseTracking(true);
butt->installEventFilter(this);

}

Dialog::~Dialog()
 {
    delete ui;
 }


bool Dialog::eventFilter(QObject *obj, QEvent *event)
   {
        if(obj == butt)
      {
         if(event->type() == QEvent::Enter)
         {

             effect->setOpacity(1);
             butt->setGraphicsEffect(effect);
         }
         else if(event->type() == QEvent::Leave)
        {

            effect->setOpacity(0.5);
            butt->setGraphicsEffect(effect);

        }
        return true;
    }
    else
    {
        return QDialog::eventFilter(obj, event);
    }
}
当我在头文件和cpp文件中注释与事件相关的部分时,输出为:

但是当我不注释这些部分时,输出是一个空的对话框窗口