Meanwhile, I applied my own graphic effect based on QGraphicsBlurEffect and using parts of this answer . If you know any better solutions, let me know.
qgraphicsgloweffect.h:
#pragma once #include <QGraphicsEffect> #include <QGraphicsBlurEffect> #include <QGraphicsColorizeEffect> #include <QGraphicsPixmapItem> #include <QGraphicsScene> #include <QPainter> class QGraphicsGlowEffect : public QGraphicsEffect { public: explicit QGraphicsGlowEffect(QObject *parent = 0); QRectF boundingRectFor(const QRectF &rect) const; void setColor(QColor value); void setStrength(int value); void setBlurRadius(qreal value); QColor color() const; int strength() const; qreal blurRadius() const; protected: void draw(QPainter* painter); private: static QPixmap applyEffectToPixmap(QPixmap src, QGraphicsEffect *effect, int extent); int _extent = 5; QColor _color = QColor(255, 255, 255); int _strength = 3; qreal _blurRadius = 5.0; };
qgraphicsgloweffect.cpp:
#include "QGraphicsGlowEffect.h" #include <QtCore\qmath.h> QGraphicsGlowEffect::QGraphicsGlowEffect(QObject *parent) : QGraphicsEffect(parent) { } void QGraphicsGlowEffect::setColor(QColor value) { _color = value; } void QGraphicsGlowEffect::setStrength(int value) { _strength = value; } void QGraphicsGlowEffect::setBlurRadius(qreal value) { _blurRadius = value; _extent = qCeil(value); updateBoundingRect(); } QColor QGraphicsGlowEffect::color() const { return _color; } int QGraphicsGlowEffect::strength() const { return _strength; } qreal QGraphicsGlowEffect::blurRadius() const { return _blurRadius; } QRectF QGraphicsGlowEffect::boundingRectFor(const QRectF &rect) const { return QRect( rect.left() - _extent, rect.top() - _extent, rect.width() + 2 * _extent, rect.height() + 2 * _extent); } void QGraphicsGlowEffect::draw(QPainter* painter) { QPoint offset; QPixmap source = sourcePixmap(Qt::LogicalCoordinates, &offset); QPixmap glow; QGraphicsColorizeEffect *colorize = new QGraphicsColorizeEffect; colorize->setColor(_color); colorize->setStrength(1); glow = applyEffectToPixmap(source, colorize, 0); QGraphicsBlurEffect *blur = new QGraphicsBlurEffect; blur->setBlurRadius(_blurRadius); glow = applyEffectToPixmap(glow, blur, _extent); for (int i = 0; i < _strength; i++) painter->drawPixmap(offset - QPoint(_extent, _extent), glow); drawSource(painter); } QPixmap QGraphicsGlowEffect::applyEffectToPixmap( QPixmap src, QGraphicsEffect *effect, int extent) { if (src.isNull()) return QPixmap(); if (!effect) return src; QGraphicsScene scene; QGraphicsPixmapItem item; item.setPixmap(src); item.setGraphicsEffect(effect); scene.addItem(&item); QSize size = src.size() + QSize(extent * 2, extent * 2); QPixmap res(size.width(), size.height()); res.fill(Qt::transparent); QPainter ptr(&res); scene.render(&ptr, QRectF(), QRectF(-extent, -extent, size.width(), size.height())); return res; }
Then you can use it like:
QGraphicsGlowEffect * glow = new QGraphicsGlowEffect(); glow->setStrength(4); glow->setBlurRadius(7); ui.label->setGraphicsEffect(glow);
The result is a good glow effect:

source share