MyTetra Share
Делитесь знаниями!
Как положить на QGraphicsScene виджет QWidget так, чтобы его фон был прозрачным
Время создания: 09.07.2021 12:41
Текстовые метки: qt, QGraphicsScene, QGraphicsView, QLabel, QWidget, прозрачность, background, задний фон
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - Графика
Запись: xintrea/mytetra_syncro/master/base/1625823664e0vq0flyfw/text.html на raw.github.com

При работе с QGraphicsScene/QGraphicsView есть одна особенность: все стандартные виджеты Qt, будучи положенными на QGraphicsScene через метод addWidget(), будут иметь непрозрачный задний фон.


Например, если положить на QGraphicsScene простейший QLabel (да, можно создавать на сцене QGraphicsTextItem, но здесь речь про другое), то этот QLabel будет всегда отображаться на фоне однотонного прямоугольника. И никакие попытки сделать этот фоновый прямоугольник прозрачным, успехом не увенчаются:



// Попытка 1

m_label->setAutoFillBackground(true);

QPalette palette=m_label->palette();

palette.setColor( QPalette::Window, QColor( "transparent" ));

m_label->setPalette( palette );


// Попытка 2

m_label->setStyleSheet("QLabel { background-color : transparent; }");


// Попытка 3

m_label->setStyleSheet("background-color : transparent;");



- все эти методы не работают.



Примечание. Если писать точнее, то похоже, что установка прозрачности зависит как от операционной системы, так и от драйверов. Например, у пользователей Windows вышеприведенные методы могут сработать. А у пользователей Linux и MacOS они не работают.



Что делать? Решение следующее. Для любого виджета, являющегося наследником QWidget, который размещается на сценграфе через метод QGraphicsScene::addWidget(), необходимо установить следующий флаг:



m_label->setAttribute( Qt::WA_TranslucentBackground );



Вот и все! Виджет с такой настройкой будет отображаться на QGraphicsScene без непрозрачного заднего фона.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования