2011-01-28 24 views
14

यह सवालपारदर्शी QWidget/QScrollArea पृष्ठभूमि शैली सेटिंग प्रभावी

से संबंधित है मैं यहाँ में पूछ रहा हूँ क्योंकि मेरा मानना ​​है कि ऐसा समुदाय के लिए एक रास्ता हो सकता है है इस व्यवहार को ठीक करने के लिए।

तो मैं पारदर्शिता रखने या एक कस्टम पृष्ठभूमि छवि को या तो करने के लिए एक ScrollArea की पृष्ठभूमि का रंग सेट करने के लिए के रूप में यह कुछ बैनर में शामिल होंगे पसंद है। मुझे यह क्यूटी निर्माता (डिज़ाइनर) में पहले से चल रहा है! :-):

Qt Creator sample

लेकिन जब सिम्युलेटर यह काम नहीं करेगा करने के लिए एप्लिकेशन की तैनाती है, ग्रे, गहरे भूरे रंग रहता है:

Emulator sample

यहाँ मेरी लेआउट का पेड़ है:

Layout Tree

और यहाँ स्टाइलशीट मैं उपयोग कर रहा हूँ (संलग्न हैMainWindow के लिए सेट):

QMainWindow { 
    background: transparent url(:/ui/designs/images_from_android/bg_plain_empty.png) top left; 
} 
QWidget#centralWidget { 
    background-color: transparent; 
} 
QPushButton { 
    color: red; 
    border: 1px solid green; 
} 
QFrame#top_header { 
    background: transparent url(:/ui/designs/images_from_android/bg_title_bar_landscape.png) top left repeat-x; 
} 
QWidget#top_banner_scroll1, 
QWidget#top_banner_scroll2 { 
    background: transparent url(:/ui/designs/images_from_android/stripe_bg.png) top left repeat-x; 
} 

यह काफी पेचीदा है। और क्यूटी डिजाइनर के रूप में मुझे उचित डिजाइन दिखाया जा रहा है ...

उत्तर

2

आप scrollArea.setStyleSheet("background-color:transparent;"); प्रयास कर सकते हैं यह मेरे लिए काम करता है।

+0

कुछ अन्य कंटेनर में बच्चे जिनके पास सही स्टाइलशीट हैं) –

+0

हां, यदि बच्चे की अपनी स्टाइलशीट नहीं है तो बच्चे को माता-पिता की स्टाइलशीट का वारिस होगा। –

+0

जोहान्स उत्तर स्क्रॉल क्षेत्र के सभी बच्चों को प्रभावित किए बिना सही तरीके से काम करता है। –

0

आप QScrollArea#top_banner1 और QScrollArea#top_banner2 को शैलियाँ निर्धारित नहीं करना चाहिए?

आप वर्तमान व्यूपोर्ट QWidgets का चयन करके और कर रहे हैं, मेरे अनुभव के लिए, शुद्ध QWidgets हमेशा पारदर्शी पृष्ठभूमि है और स्टाइल का समर्थन नहीं करते। इस प्रकार, यदि स्क्रॉल क्षेत्र में रंग होता है, तो यह दिखाएगा।

पी एस। साफ स्टाइल!

11

स्टाइलशीट

QScrollArea { background: transparent; } 
QScrollArea > QWidget > QWidget { background: transparent; } 
QScrollArea > QWidget > QScrollBar { background: palette(base); } 

का प्रयोग करें इस सुविधा देता है मान एक समान है, लेकिन simplyfied लेआउट को समझने के लिए:

scrollarea   QScrollArea 
    + scrollareaContent QWidget 
     + label   QLabel 

दिलचस्प बात यह है वहाँ दो एक गैर पारदर्शी पृष्ठभूमि के साथ विगेट्स हैं। पहला स्क्रोलर स्वयं (स्टाइलशीट की पहली पंक्ति के साथ पारदर्शी बना दिया गया है)।

दूसरा (जिसे मैंने उम्मीद नहीं की थी) scrollareaContent है जो दूसरी पंक्ति के साथ संबोधित हो जाता है। वहां पहला QWidget QScrollArea का निजी व्यूपोर्ट है जिसे सीधे एक्सेस नहीं किया जा सका। दूसरा एक scrollareaContent है। इस दृष्टिकोण को अन्य सभी विगेट्स को प्रभावित किए बिना सभी QScrollAreas पारदर्शी बनाना चाहिए।

अद्यतन: मैंने स्टाइलशीट में एक तीसरी पंक्ति जोड़ा जो स्क्रॉलबार को पारदर्शी होने से रोकता है क्योंकि वे QScrollArea के नीचे दो स्तर QWidgets भी हैं।

+0

+1 धन्यवाद! सिंटैक्स QScrollArea> QWidget> QWidget ने मुझे पृष्ठभूमि रंग भी सेट करने में मदद की! –

+1

यह स्क्रॉलबार के रंग तोड़ता है। [नीचे जादमेक का जवाब] (http://stackoverflow.com/a/22403366/4885801) सही प्रतीत होता है। – isanae

+0

क्यूटी 5.6.2 में मैंने सबकुछ बनाने में कामयाब रहा लेकिन स्क्रॉलबार निम्नलिखित के साथ पारदर्शी (ऑर्डर मायने रखता है!): 'सेट स्टाइलशीट ("क्यूएसक्रोल एरिया> क्यूविजेट> क्यूएसक्रॉलबार {पृष्ठभूमि: पैलेट (बेस);}"); ' ' _graphicsView- > सेट स्टाइलशीट ("पृष्ठभूमि: पारदर्शी"); ' – kambala

4

, निम्नलिखित स्टाइलशीट मैं स्क्रॉल क्षेत्र पारदर्शी बनाने के लिए कर रहा था का उपयोग करते हुए स्क्रॉलबार के लिए डिफ़ॉल्ट पृष्ठभूमि रंग रखने: कि हालांकि सभी बच्चों कोई विशेष स्टाइलशीट है पारदर्शी है कि (thoughthough एक पैक कर सकता है कर देगा

scrollArea.setStyleSheet("QScrollArea {background-color:transparent;}"); 
scrollAreaContents.setStyleSheet("background-color:transparent;"); 
+1

यह विजेट पर संदर्भ मेनू काले बनाता है। सामग्री विजेट (दूसरी पंक्ति) पर सीएसएस केवल उस आईडी ('ऑब्जेक्टनाम' संपत्ति से) का उपयोग कर उस विजेट पर बाध्य होना चाहिए। यदि विजेट को 'scrollAreaContents' नाम दिया गया है, तो यह '#scrollAreaContents {पृष्ठभूमि-रंग होना चाहिए: पारदर्शी; } '। – isanae

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