2013-06-27 6 views
5

मैं स्टाइलशीट के क्यूटी की विधि के लिए काफी नया हूं और मैं QPushButton पर आइकन और टेक्स्ट के बीच अंतर को समायोजित करना चाहता हूं।स्टाइलशीट के साथ QPushButton आइकन/टेक्स्ट स्पेसिंग को कैसे बदलें?

इस अंतर को मैं की बात कर रहा हूँ है: http://imageshack.us/scaled/thumb/593/4kem.png

QPushButton { 
    qproperty-icon: theme_url("/button_action/add"); 
    qproperty-iconSize: 14px; 
} 

वहाँ एक पैरामीटर मैं इस अंतरिक्ष समायोजित करने के लिए उपयोग कर सकते हैं है (stackoverflow मुझे अभी तक तस्वीरें पोस्ट नहीं दूँगी)? मैंने margin, padding, spacing की कोशिश की है? शायद एक अलग चयनकर्ता है जिसका उपयोग मैं आइकन को पकड़ने के लिए कर सकता हूं?

+1

मैंने स्टाइलशीट में कुछ भी उपयोगी नहीं देखा है, शायद आप बटन के टेक्स्ट में व्हाइटस्पेस का उपयोग कर सकते हैं? ;) – ariwez

+1

सिस्टम में बहुत सारे बटन हैं इसलिए मैं उन्हें मैन्युअल रूप से बदलने के बजाय एक स्टॉप उत्तर देने की उम्मीद कर रहा था ... – hannahd

+0

आप अंतराल के लिए खाते में व्यापक रूप से आइकन को संशोधित कर सकते हैं? जहां तक ​​मुझे पता है कि ऐसी कोई स्टाइल शीट संपत्ति नहीं है। आप बस बटन पर टेक्स्ट और आइकन सेट नहीं कर सकते थे, बल्कि इसके बजाय बटन पर एक लेआउट सेट करें और आइकन के लिए 2 लेबल्स डालें, एक टेक्स्ट – cppguy

उत्तर

0

वास्तव में QPushButton के साथ आप भाग्य से बाहर हैं। आप qt documentation में पुश बटन स्टाइल करने के लिए कार्य विकल्पों की पूरी सूची पा सकते हैं (मुझे लगता है कि आप qt5 का उपयोग करते हैं, लेकिन यह अन्य संस्करणों के लिए भी उपलब्ध है)।

यदि आप आइकन पर अधिक नियंत्रण चाहते हैं तो अक्सर क्यूटूलबटन के साथ अपने क्यूपशबटन को एक्सचेंज करना है, जो कि वही हैं, सिवाय इसके कि उनके पास टूलबार के साथ संगत बनाने के लिए अतिरिक्त सुविधाएं हैं- और- उनके पास आइकन प्लेसमेंट के लिए अधिक विकल्प हैं । लेकिन यह आपके लिए काम नहीं कर सकता क्योंकि as you can see वे QPushButtons के समान ही स्टाइल हैं। लेकिन "टूलबटन स्टाइल" पैरामीटर को देखें जो आपको आइकन को चारों ओर स्थानांतरित करने की अनुमति देता है।

सूची में अगला आर्टवर्क बदल रहा है। यदि आप चाहते हैं कि अधिक जगह है तो कलाकृति में अतिरिक्त खाली पिक्सल जोड़ें। यह वास्तव में पूर्णतावादी के दिमाग को नुकसान पहुंचाता है लेकिन प्रभावी है।

सूची में अगला QPushButton subclassing और खुद को पेंट ओवरराइड आता है। यह तुलना में अधिक चुनौतीपूर्ण लगता है। क्यूटी में उप-वर्ग पहले से ही एक आदत बन गया है और यह बहुत अच्छा काम करता है। Subclassing के मामले पर एक जिफी में(4.8 के लिए लेकिन 5 के लिए होना चाहिए) यहां एक tutorial i googled है। यह पेंट घटना को ओवरराइड करने में भी शामिल है।

आशा है कि यह सहायक होगा।

0

कम से कम Qt5.5 के साथ (यह भविष्य में बदल सकता है, मुझे आशा है), पेंट इवेंट को ओवरराइड करने के अलावा, जो जटिल है और मेरी राय में सिर्फ एक साधारण चीज़ के लिए गन्दा है, उसमें जाने के लिए कोई अंतर्निहित क्यूटी तरीका नहीं है यहाँ कुछ या पिक्सेल आइकन (छोटे समायोजन)। यदि आप आइकन को हटाते हैं और background को अपने संसाधन URL में अपने आइकन पर सेट करने के लिए स्टाइलशीट का उपयोग करते हैं, तो आप स्टाइलशीट में background-position प्रॉपर्टी का उपयोग कर सकते हैं, लेकिन दुर्भाग्यवश यह केवल center, left, आदि जैसे शब्दों को स्वीकार करता है, पिक्सेल समायोजन नहीं।

यहां बताया गया है कि मैंने इस समस्या का समाधान कैसे किया। मैंने पारदर्शी पीएनजी बनाए जो मुझे आवश्यक से थोड़ा बड़ा था, जहां मुझे पीएनजी के अंदर आइकन के चारों ओर 4 पीएक्स मार्जिन पसंद था। फिर, मैंने उस कैनवास के अंदर आइकन को स्थानांतरित कर दिया और इसे प्रोजेक्ट संसाधन फ़ाइल में पुनः लोड कर दिया, और उसके बाद इसे QPushButton के लिए डिज़ाइनर में आइकन प्रॉपर्टी के साथ मैप किया, और यह काम किया। अब मेरे पास आइकन हैं जो बाईं ओर ठीक से ऊपर के पाठ के साथ लाइन पर हैं। मैं आइकन और टेक्स्ट के बीच के अंतर को भी बढ़ा सकता हूं।

0

इसके लिए जाने का सबसे आसान तरीका QPushButton से अपना स्वयं का वर्ग विरासत बनाना और पेंटइवेंट को ओवरराइड करना है और फिर मैन्युअल रूप से आइकन के पिक्समैप को मैन्युअल रूप से रखना चाहते हैं।

0

Qt5.7 के रूप में मुझे आइकन/टेक्स्ट स्पेसिंग के लिए किसी अंतर्निहित कार्यक्षमता के बारे में पता नहीं है। मैं आमतौर पर जो करता हूं वह छवि को दाईं ओर कुछ और स्थान देता है और उसके अनुसार बटन के आइकन आकार को सेट करता है।

समाधान:

  1. 32 * 16 पिक्सल करने के लिए अपने आइकन फ़ाइल का आकार बदलें, लेकिन इसकी सामग्री छोड़ है।
  2. कॉल बटन IconSize (QSize (32, 16)) अपने बटन पर।

परिणाम: अब इसके आइकन और टेक्स्ट के बीच 16 पिक्सेल खाली स्थान है। 32 पिक्सेल सिर्फ मेरा उदाहरण है, आप निश्चित रूप से अतिरिक्त शैली को उस शैली में सेट कर सकते हैं जो आपकी शैली को सुइट करता है।

यदि आप इसे अपने सभी बटन तत्वों पर लागू करना चाहते हैं तो बस एक छोटे से उप-वर्ग बनाएं जो इसे स्वचालित रूप से कन्स्ट्रक्टर में करता है। इसके लिए पेंटएवेंट विधि को ओवरराइड करने की वास्तव में आवश्यकता नहीं है।

संबंधित मुद्दे