मुझे वास्तव में क्यूएमएल पसंद है। मुझे पसंद है कि मैं घटकों को परिभाषित कर सकता हूं (कक्षाओं के तुलनीय) और उनके गुण, और उन्हें कहीं और (वस्तुओं के तुलनीय) से तुरंत चालू कर सकते हैं।क्यूएमएल में बाल प्लेसहोल्डर्स के साथ "टेम्पलेट" को कैसे परिभाषित किया जाए?
मैं परिभाषित कर सकता हूं, एक बटन, कुछ दिखने और महसूस करने और उस पर एक लेबल टेक्स्ट परिभाषित कर सकता हूं। ऐसा इसलिए किया जाता जा सकता है, उदाहरण के लिए, इस घटक परिभाषा (Button.qml
) का उपयोग:
Item {
id: button
property string label
anchors.fill: parent
Rectangle {
anchors.fill: parent
radius: 10
color: "gray"
Text {
anchors.centerIn: parent
font.pixelSize: 20
text: button.label
color: "white"
}
}
}
और instanciated यह मुख्य फ़ाइल में (main.qml
):
Rectangle {
width: 300
height: 200
Button {
anchors.centerIn: parent
anchors.margins: 50
label: "Hello button!"
}
}
लेकिन मैं निम्नलिखित प्रतिबंध देखें: मैं केवल यह कर सकते हैं कुछ गुण के साथ एक बटन टेम्पलेट परिभाषित करें, कुछ प्लेसहोल्डर के साथ नहीं। उदाहरण में परिभाषित सभी बच्चे प्रत्यक्ष बच्चे होंगे, कम से कम प्रति डिफ़ॉल्ट, और मैं इस व्यवहार को बदलना चाहता हूं।
मान लें कि मैं एक आइटम रखना चाहता हूं (चलो एक छवि कहें, लेकिन मैं Button
की परिभाषा बताना नहीं चाहता कि यह एक छवि होगी)। मुझे कुछ ऐसा लगता है:
Item {
id: button
property Item contents <-- the client can set the placeholder content here
anchors.fill: parent
Rectangle {
anchors.fill: parent
radius: 10
color: "gray"
Item {
id: placeholder <-- where the placeholder should be inserted
}
}
Component.onCompleted: {
// move the contents into the placeholder...
}
}
मैं इसे कैसे प्राप्त कर सकता हूं? मुझे नहीं पता कि Component.onCompleted
का उपयोग सही तरीका है या नहीं। ध्यान दें कि, हालांकि, मेरे मामले में सामग्री बाद में कभी नहीं बदलेगी (कम से कम आवेदन के मेरे वर्तमान डिजाइन में ...)।
इसके अलावा, मैं प्लेसहोल्डर के भीतर काम करने के लिए एंकरिंग करना चाहता हूं। उदाहरण के लिए, यदि मैं सामग्री को टेक्स्ट तत्व के रूप में परिभाषित करता हूं, तो उसके माता-पिता में केंद्रित होता है (जो पहले टेम्पलेट स्वयं होगा)। फिर मेरा कोड प्लेसहोल्डर को प्लेसहोल्डर में ले जाता है और पैरेंट एंकर को प्लेसहोल्डर आइटम के रूप में होना चाहिए, न कि टेम्पलेट आइटम।
बीटीडब्ल्यू, यदि आप अभी भी बात से क्यूएमएल स्कोप पहेली के बारे में सोच रहे हैं, तो देखें: http://stackoverflow.com/questions/11339719/qml-component-scope-puzzle – mlvljr
शानदार, इस लिंक के लिए धन्यवाद!;) वैसे, "डी-पॉइंटर" (इस बात में भी) निजी सदस्यों (जेएस फंक्शंस) को छिपाने के लिए इस्तेमाल किया जा सकता है। मुझे डबल अंडरस्कोर से बेहतर लगता है। मैं यह भी सुनिश्चित करने के लिए "निजी" नाम देता हूं कि कोई भी इस बच्चे के ऑब्जेक्ट के सदस्यों को गलती से एक्सेस नहीं करेगा। – leemes
दिलचस्प, याद रखें (डी-पीआरटी), तो यह कुछ प्रकार का क्यूएमएल/जेएस पिंपल है? – mlvljr