Qtで「構成されたアイコン」のようなものを実装しようとしています。
ターゲット:アイコンの部分だけに動的に色を設定する必要があります。
私の考え:このアイコンを他の 2 つのアイコンで構成します。必要に応じて (おそらく ColorizeEffect によって) 色付けされ、オーバーレイ レイヤーとして機能する 2 番目のアイコンの下にブレンドされる 1 つのアイコン。
問題: 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 );
};
そして、これが「作成済み」アイコンの作成方法です。
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 はまったく同じに見えると思います。そして、いまいましい背景に加えて、それは本当にです。しかし、私はそれを透明にする必要があります。
(paint(...) メソッドを空のままにしても、いまいましい背景がそこにあります!)
背景を透明にする方法を知っている人はいますか?ありがとう。