Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Иволга от Апрель 13, 2017, 15:04



Название: Прозрачность в QGraphicsRectItem
Отправлено: Иволга от Апрель 13, 2017, 15:04
Имеется потомок QGraphicsRectItem, который в paint() отрисовывает QImage.
Без прозрачности результат такой (scr0 во вложении).
Прозрачность 0.4 в QNX (scr1) - то, что нужно.
То же самое в Linux (scr2) - ерунда какая-то, что происходит?


Название: Re: Прозрачность в QGraphicsRectItem
Отправлено: mitrich от Апрель 14, 2017, 10:26
А как прозрачность задаёшь? Через QPainter::setOpacity или альфа-компонент цвета при рисовании устанавливаешь? CompositionMode меняешь? Мало информации, покажи кусок кода что-ли.


Название: Re: Прозрачность в QGraphicsRectItem
Отправлено: Иволга от Апрель 14, 2017, 14:01
Задаю свойство QGraphicsRectItem::setOpacity(), больше ничего.
Код:
    
m_pMap->setOpacity(.4);
addItem(m_pMap);


Название: Re: Прозрачность в QGraphicsRectItem
Отправлено: mitrich от Апрель 14, 2017, 20:11
Глюк какой-то. Можно попробовать вместо этого устанавливать прозрачность непосредственно при рисовании в QGraphicsItem::paint()
Код
C++ (Qt)
painter->setOpacity(0.4);
painter->drawImage...
 
и посмотреть на результат.

А ещё чисто из любопытства: вставь этот код в какой-нибудь метод, в котором осуществляется рисование и посмотри, что будет выводится:
Код
C++ (Qt)
#include <typeinfo>
#include <QPaintEngine>
//.....
QPaintEngine *eng = painter->paintEngine();
qDebug() << "Paint engine type:" << eng->type() << "Name:" << typeid(*eng).name();
 


Название: Re: Прозрачность в QGraphicsRectItem
Отправлено: Иволга от Апрель 18, 2017, 10:59
Цитировать
Можно попробовать вместо этого устанавливать прозрачность непосредственно при рисовании в QGraphicsItem::paint()
(...)
и посмотреть на результат.
Результат тот же.

Цитировать
А ещё чисто из любопытства: вставь этот код в какой-нибудь метод, в котором осуществляется рисование и посмотри, что будет выводится:
(...)
QPaintEngine *eng = painter->paintEngine();
qDebug() << "Paint engine type:" << eng->type() << "Name:" << typeid(*eng).name();

Paint engine type: 10 Name: 18QRasterPaintEngine