2014-12-18 2 views
7

Qt에서 "구성된 아이콘"과 같은 것을 구현하려고합니다.QIconEngine 및 투명도를 사용하는 사용자 지정 QIcon

대상 : 아이콘의 일부분 만 색상을 동적으로 설정해야합니다.

내 아이디어 : 다른 두 사람이이 아이콘을 구성하십시오. 하나의 아이콘은 원하는대로 (아마도 ColorizeEffect로) 채색 될 것이고 두 번째 아이콘 아래에 혼합되어 오버레이 레이어 역할을합니다.

문제

: 나는 QIconEngine 을 시도하고 페인트 방법을 구현. ColorizeEffect가 작동하지 않는 것처럼 보입니다 (임시 QLabel로 해킹을 시도해도 - 강도가 0.0 이상으로 설정되면 QIcon이 비어 있음). 하지만 이것이 주요 문제는 아닙니다. 것은 내가하는 일에 상관없이이 "구성된"아이콘에 대한 기본 색칠 된 배경을 얻습니다. 여기



Two QToolButtons with QIcons, left icon is simple QIcon, right is my "Composed" icon

내 코드의 조각입니다 :

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이 완전히 똑같을 것으로 예상됩니다. 그리고 저주받은 배경 외에 정말입니다. 하지만 투명하게 만들어야합니다.

(나는 빈 내 페인트 (...) 메소드를 떠날 경우에도, 망할 배경이있다!)

사람은 배경을 투명하게하는 방법을 알고 있나요? 감사합니다. .

+0

QIconEngine의 Doc는 "use QIconEngineV2"라고 말합니다. 너 그거 해봤 니? –

+0

물론. 효과가 없습니다. Fortunatelly 나는이 문제를 해결했다. QIconEngine이 외부에서 호출되는 방식입니다. 나는 스스로 답을 컴파일 할 것입니다. :-) – GPUquant

답변

관련 문제