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