我正在使用QGraphicsDropShadowEffect使我的GUI更加美观。最少的工作样本:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsDropShadowEffect>

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

    QGraphicsDropShadowEffect *g = new QGraphicsDropShadowEffect(this);
    ui->pushButton->setGraphicsEffect(g);
    ui->pushButton_2->setGraphicsEffect(g);
    ui->pushButton_3->setGraphicsEffect(g);
}

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


如您所见,我有3个按钮,并且希望每个按钮的顶部都有一个漂亮的阴影。尽管我在每个按钮上都设置了图形效果,但只能在最后一个按钮上看到它,以下是图像:



我如何改善它,原因是什么?

这有效:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsDropShadowEffect>

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

    QGraphicsDropShadowEffect *g1 = new QGraphicsDropShadowEffect(this);
    QGraphicsDropShadowEffect *g2 = new QGraphicsDropShadowEffect(this);
    QGraphicsDropShadowEffect *g3 = new QGraphicsDropShadowEffect(this);

    ui->pushButton->setGraphicsEffect(g1);
    ui->pushButton_2->setGraphicsEffect(g2);
    ui->pushButton_3->setGraphicsEffect(g3);
}

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


但似乎不是我能拥有的最佳解决方案。

最佳答案

这是您正在调用的函数的正常行为

参见文档
http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#setGraphicsEffect


  如果effect安装在其他项目上,请设置setGraphicsEffect()
  将从项目中移除效果并将其安装在该项目上。

07-28 01:03