2009-10-20 4 views
17

क्या क्यूटी की गतिशील गुण वास्तव में स्टाइलशीट के साथ इतनी गतिशील है?क्या क्यूटी की स्टाइलशीट वास्तव में _dynamic_ गुणों को संभालने वाली हैं?

मैं स्टाइलशीट और गतिशील गुणों से बुनियादी उदाहरण है:

/*stylesheet:*/ 
*[field_mandatory="true"] { background-color: "yellow";} 

और मैं कोड में कहीं रनटाइम पर हो रहा है:

/*code:*/ 
myWidget->setProperty("field_mandatory", field->isFilled()); 

कुछ भी नहीं यूआई में बदल जाता है, जब इस संपत्ति है रनटाइम पर बदल गया।

क्या किसी के पास विचार है कि गुण बदलते समय क्यूटी के स्टाइलशीट इंजन को अपडेट करने के लिए क्या किया जाना चाहिए, या यह इस तरह के मामलों को संभालने में भी सक्षम है?

बीटीडब्ल्यू। मैं क्यूटी 4.4

+0

हो सकता है कि आपको इसकी आवश्यकता होने के लिए एक Q_PROPERTY? – cheez

उत्तर

6

का उपयोग कर रहा हूं, मुझे एक त्वरित, हालांकि थोड़ा हैशिश, विजेट की स्टाइल अपडेट करने का तरीका मिला।

myWidget->style()->unpolish(myWidget); 
myWidget->ensurePolished(); 

संपत्तियों को बदलने के बाद ऐसा करने से संपत्ति डेटा और यूआई के बीच सहसंबंध रहता है।

+0

यह मेरे लिए PyQt 4.7.2 (Qt 4.6.2) टन वैन डेन हेउवेल के सुझाव के साथ काम नहीं करता था। –

+0

यह मेरे लिए काम करता है! मैं Qt 4.7 चला रहा हूं और 'QWidget :: setEnabled (bool)' के माध्यम से "सक्षम" संपत्ति में परिवर्तन संबंधित '[सक्षम =" झूठी "]' और '[सक्षम = स्टाइलशीट में "सत्य"] 'अनुभाग। उपरोक्त का उपयोग एक आकर्षण की तरह काम किया। मैंने उन्हें सक्षम किया है जहां भी सक्षम राज्य बदलता है, बस उन्हें अपने कोड में उस फ़ंक्शन पर 'रीपोलिश (QWidget *)' फ़ंक्शन और पेपर कॉल में लपेटता है। – kurige

+1

एक साइड-नोट के रूप में: जो भी उपरोक्त उत्तर को कम करता है ... "यह मेरे लिए काम नहीं करता है" आम तौर पर डाउनवोट के लिए पर्याप्त कारण नहीं है। – kurige

2

मैंने इसे बिना किसी किस्मत के भी कोशिश की, और जब मुझे दस्तावेज़ में निम्नलिखित पाठ मिला, तो मैंने छोड़ दिया। The Style Sheet Syntax देखें:

चेतावनी: शैली पत्रक के बाद क्यूटी गुण परिवर्तन का मूल्य निर्धारित किया गया है, तो यह बल एक शैली पत्रक पुन: संगणना करने के लिए आवश्यक हो सकता है। इसे प्राप्त करने के लिए तरीका स्टाइल शीट को अनसेट करना है और इसे फिर से सेट करना है।

3

मेरे लिए निम्न कार्य विजेट का एक उचित restyling सुनिश्चित करने के लिए:

myWidget->setStyle(QApplication::style())

स्टाइलशीट के रूप में mdcl द्वारा प्रस्तावित मेरे लिए काम नहीं किया की एक पुन: संगणना जबरदस्ती। मैं क्यूटी 4.5.3 का उपयोग कर रहा हूँ।

+0

यह मेरे लिए PyQt 4.7 का उपयोग करके काम करता है।2 (क्यूटी 4.6.2)। एक वास्तविक शर्म की बात है कि यह सामान इतना अच्छा काम नहीं करता है। आपको केवल सुनिश्चित करने के लिए सक्षम होना चाहिए() और इसके साथ किया जाना चाहिए। –

18

क्यूटी उनके FAQ में निम्नलिखित सुझाव है जो:

style()->unpolish(theWidget); 
style()->polish(theWidget); 

उन्होंने यह भी कहते हैं कि तुम ऐसा करके स्टाइलशीट रीसेट कर सकते हैं निम्नलिखित लेकिन इसे और अधिक महंगा है:

setStyleSheet(styleSheet()); 
संबंधित मुद्दे