7
Qt에서 "구성된 아이콘"과 같은 것을 구현하려고합니다.QIconEngine 및 투명도를 사용하는 사용자 지정 QIcon
대상 : 아이콘의 일부분 만 색상을 동적으로 설정해야합니다.
내 아이디어 : 다른 두 사람이이 아이콘을 구성하십시오. 하나의 아이콘은 원하는대로 (아마도 ColorizeEffect로) 채색 될 것이고 두 번째 아이콘 아래에 혼합되어 오버레이 레이어 역할을합니다.
문제
: 나는 QIconEngine 을 시도하고 페인트 방법을 구현. ColorizeEffect가 작동하지 않는 것처럼 보입니다 (임시 QLabel로 해킹을 시도해도 - 강도가 0.0 이상으로 설정되면 QIcon이 비어 있음). 하지만 이것이 주요 문제는 아닙니다. 것은 내가하는 일에 상관없이이 "구성된"아이콘에 대한 기본 색칠 된 배경을 얻습니다. 여기
class QComposedIconEngine: public QIconEngine
{
public:
QComposedIconEngine();
~QComposedIconEngine();
virtual void paint (QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state);
virtual QIconEngine * clone(void) const;
public:
QIcon m_qIconA;
QIcon m_qIconB;
QColor m_qColor;
};
그리고 여기에 페인트의 내 구현 (...)입니다 : 여기
void CLxQComposedIconEngine::paint (QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state)
{
QBrush brush = painter->background();
QColor color = brush.color();
brush.setColor(Qt::transparent);
painter->setBackground(brush);
painter->eraseRect(rect);
painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
m_qIconA.paint(painter, rect, Qt::AlignCenter, mode, state);
};
과 어떻게 내가 "Composed"아이콘을 만드는지 :
QComposedIconEngine * qIconEngine = new QComposedIconEngine();
QIcon i1;
QIcon i2;
i1.addPixmap(...);
i2.addPixmap(...);
qIconEngine->m_qIconA = i1;
qIconEngine->m_qIconB = i2;
QIcon i3(qIconEngine);
i1과 i3이 완전히 똑같을 것으로 예상됩니다. 그리고 저주받은 배경 외에 정말입니다. 하지만 투명하게 만들어야합니다.
는(나는 빈 내 페인트 (...) 메소드를 떠날 경우에도, 망할 배경이있다!)
는사람은 배경을 투명하게하는 방법을 알고 있나요? 감사합니다. .
QIconEngine의 Doc는 "use QIconEngineV2"라고 말합니다. 너 그거 해봤 니? –
물론. 효과가 없습니다. Fortunatelly 나는이 문제를 해결했다. QIconEngine이 외부에서 호출되는 방식입니다. 나는 스스로 답을 컴파일 할 것입니다. :-) – GPUquant