2012-11-12 9 views
6

में सरल रंग भरने QIcons मुझे एक मेनू बनाने की आवश्यकता है जो QWidget की पृष्ठभूमि को बदलता है। मैं एक क्यूआईकॉन रखना चाहता हूं जो कि क्यूएक्शन में चयनित रंग का प्रतिनिधित्व करता है जो QMenu को पॉप्युलेट करता है। मैं फ़ोटोशॉप पॉप आउट नहीं करना चाहता हूं और मैन्युअल रूप से आइकन पेंट करना चाहता हूं। क्या एक साधारण आइकन से भरा एक साधारण आइकन प्रोग्राम करना संभव है? यदि आवश्यक हो तो इस तरह मेरे पास क्यूएक्शन की मनमानी संख्या हो सकती है, और मुझे फ़ोटोशॉप में आइकन का पूरा समूह नहीं बनाना पड़ेगा। \क्यूटी

उत्तर

12

आप QPixmap से QIcon बना सकते हैं। QPixmap को किसी दिए गए आकार के साथ बनाया जा सकता है, फिर 'भरें' का उपयोग कर रंग से भर दिया जा सकता है।

उदाहरण के लिए, एक लाल 100x100 आइकन बनाने के लिए:

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

यह भरना होगा छवि के केवल पारदर्शी भागों, है ना? मेरा मतलब है, क्या इसका उपयोग क्यूआईकॉन के पारदर्शी हिस्सों को रंग के साथ भरने के लिए किया जा सकता है? – 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 ('पारदर्शी'), Qt.MaskInColor) मेरे लिए बेहतर काम करता है – falkb

+0

विषय सी ++ के साथ टैग किया गया है, लेकिन यह कोई मान्य C++ कोड नहीं है। इसे संपादित करना चाहते हैं लेकिन समीक्षकों ने उन कारणों से इसे खारिज कर दिया जिन्हें मैं नहीं जानता। इसके अलावा, सी ++ को पोर्ट करने के बाद समाधान मेरे लिए काम करता था। – bns

+0

मुझे लगता है कि आप सही हैं - मुझे नहीं पता था कि प्रश्न सी ++ से संबंधित था - लेकिन मुझे यह भी लगता है कि यह पहले से मौजूद मौजूदा उत्तर को बदलने के लिए नहीं है ... और मुझे नहीं पता कि आपका कोड क्या है या नहीं स्थिर - इसलिए मैं इसे अपने लिए स्वीकार नहीं कर सकता। मुझे लगता है, आपको खुद का जवाब देना चाहिए! संकेत के लिए धन्यवाद। – Henhuy