Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Сентябрь 27, 2016, 18:03



Название: (РЕШЕНО) Потеря прозрачности виджетов на QGraphicsProxyWidget
Отправлено: Гурман от Сентябрь 27, 2016, 18:03
Задача такая - виджеты расположены в дизайнере над QGraphicsView, затем при старте приложения они "переезжают" на QGraphicsProxyWidget-ы, лежащие на соответствующей QGraphicsScene. Такое нужно, чтобы можно было применить к виджетам любые трансформации - если они просто лежат centralWidget главного окна, то любыми способами их трансформировать невозможно. То, что нужно получилось, но когда виджет переезжает на QGraphicsProxyWidget, он почему-то теряет прозрачность. То есть, те его части, которые были прозрачны, становятся непрозрачными. Во всяком случае это так для виджетов, содержащих SVG графику. Как для родных из комплекта, так и добавленных.

Например, во вложении первый скрин - так выглядит окно приложения в Qt-дизайнере (стрелка - это самодельный SVG-виджет), а во втором вложении уже скрин запущенного приложения. Даже родной виджет с вращающейся ручкой потерял прозрачность.

Пробовал запрещать заливку фона для QGraphicsView:

Код:
                    QGraphicsProxyWidget* gproxy = new QGraphicsProxyWidget;
                    gproxy->setAutoFillBackground( false ); // не помогает
                    gproxy->setWidget( widget );
                    scene->addItem( gproxy ); // attach to scene

Может кто уже встречал в сети, как это побороть? Нужно, чтобы виджеты, лежащие на QGraphicsProxyWidget, который на самом деле, QGraphicsItem, были прозрачны там где нужно.


Название: Re: Потеря прозрачности виджетов на QGraphicsProxyWidget
Отправлено: Гурман от Сентябрь 27, 2016, 20:30
Всё, решено, надо перед привязкой виджета к QGraphicsProxyWidget установить виджету атрибут Qt::WA_NoSystemBackground. Почему-то при отвязке виджета от предыдущего родителя этот атрибут сбрасывается в false и бэкграунд вылазит. Нигде не описано.