yak
yak

Reputation: 3930

QGraphicsDropShadowEffect works only for one item on ui, although I used it everywhere

I'm using QGraphicsDropShadowEffect to make my GUI look pretier. Minimal working sample:

#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;
}

As you see, I have 3 buttons and want to have a fancy shadow at the top of every button. Although I set graphics effect on every button it can be seen only on the last button, heres the image:

enter image description here

How can I improve it and what is the cause?

This works:

#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;
}

but seem not to be the best solution I can have. enter image description here

Upvotes: 0

Views: 1355

Answers (1)

Boo
Boo

Reputation: 673

It's the normal behavior of the function you are calling

see documentation http://qt-project.org/doc/qt-4.8/qgraphicsitem.html#setGraphicsEffect

If effect is the installed on a different item, setGraphicsEffect() will remove the effect from the item and install it on this item.

Upvotes: 2

Related Questions