2012-11-12 47 views
6

QWidgetの背景を変更するメニューを作成する必要があります。選択した色を表すQIconをQMenuに配置して、QMenuに入力するQActionsに配置したいと思います。私はPhotoshopを飛ばして、手動でアイコンをペイントする必要はありません。特定の色で塗りつぶされた簡単なアイコンをプログラムすることは可能ですか?こうすることで、必要に応じて任意の数のQActionを設定することができ、Photoshopでたくさんのアイコンを作成する必要はありません。 \Qtの単純な色の塗りつぶし

答えて

12

QPixmapからQIconを構築することができます。 QPixmapは与えられたサイズで構築され、次に 'fill'を使って色で塗りつぶされます。

例えば、赤100×100のアイコンを作成します。

QPixmap pixmap(100,100); 
pixmap.fill(QColor("red")); 
QIcon redIcon(pixmap); 
+0

これは充填します画像の透明部分のみ、右? QIconの透明部分を色で塗りつぶすことができますか? – SexyBeast

+0

私は理解できません。このコードは、完全に新しいアイコンを作成します。 – cgmb

5

は、他の色にアイコンから色を変更する方法を考え出しました。したがって、アイコンの画像は、一の単色で構成しなければならない(ここでは「黒」)(「赤」のような)別の色にピックスマップ、そのマスキング能力を使用して変換することができる。

pixmap = QPixmap(filename) 
mask = pixmap.createMaskFromColor(QColor('black'), Qt.MaskOutColor) 
pixmap.fill((QColor('red'))) 
pixmap.setMask(mask) 

btNew = QToolButton() 
btNew.setIcon(QIcon(pixmap)) 
+0

クールですが、createMaskFromColor(QColor( 'transparent')、Qt.MaskInColor)は私のためにもっとうまく動作します – falkb

+0

トピックにはC++でタグ付けされていますが、これは有効なC++コードではありません。それを編集したいと思いますが、私が知らない理由で査読者が拒否しました。 これに加えて、ソリューションはC++に移植した後に私のために働いていました。 – bns

+0

私はあなたが正しいと思う - 質問がC++に関連していることを認識していませんでした - しかし、私はまたそれがすでに存在する答えを変更するつもりはないと思っています... あなたのコードが安定した - 私はそれを自分で受け入れることはできません。私はあなた自身に答えるべきだと思います!ヒントをありがとう。 – Henhuy

関連する問題