c++ - बाध्यकारी चेकबॉक्स 'चेक की गई' संपत्ति को सी++ ऑब्जेक्ट Q_PROPERTY के साथ




qt data-binding (2)

जैसा कि लीमिस बताते हैं, उपयोगकर्ता चेक बॉक्स को क्लिक करके आपके द्वारा बनाए गए बंधन को तोड़ता है। इसलिए बाध्यकारी नहीं बनाते हैं, बल्कि इसके बजाय "मिल" केस को संभालने के लिए सीधे परिवर्तन सिग्नल से कनेक्ट करें। "सेट" केस को संभालने के लिए "ऑनक्लाइट" का उपयोग करें इस समाधान के लिए आपको भी Component.onCompleted () में आरंभ करना आवश्यक है। उदाहरण के लिए...

CheckBox {
    id: myCheck
    onClicked: user.status = checked
    Component.onCompleted: checked = user.status
    Connections {
        target: user
        onStatusChanged: myCheck.checked = user.status
    }
}

मैं QtQuick सीख रहा हूँ और मैं C ++ कक्षाएं और QML गुणों के बीच बाध्यकारी डेटा के साथ खेल रहा हूं।

मेरे सी ++ ऑब्जेक्ट मॉडल में, मेरे पास दो गुण हैं:

Q_PROPERTY(QString name READ getName WRITE setName NOTIFY nameChanged)
Q_PROPERTY(bool status READ getStatus WRITE setStatus NOTIFY statusChanged)

और मेरी .qml फ़ाइल में:

TextEdit {
    placeholderText: "Enter your name"
    text: user.name
}

Checkbox {
    checked: user.status
}

जब मैं अपने C ++ कोड से setName साथ उपयोगकर्ता का नाम setName हूं, तो वह दृश्य में स्वतः दिखाई देता है। जब मैं चेकबॉक्स को चेक / अनचेक करता हूं, या जब मैं अपने सी ++ कोड से setStatus() कॉल setStatus() हूं, तो कुछ भी नहीं होता है ऐसा लगता है कि चेकबॉक्स की checked की गई संपत्ति में TextEdit घटक के समान व्यवहार नहीं है।

मैं अपने गुणों को एक घोषणात्मक तरीके से बाँधना नहीं चाहता। Qt त्वरित समर्थन संपत्ति बाध्यकारी नहीं है?

आपके सहयोग के लिए धन्यवाद।


इसके चारों ओर एक तरह से बाध्यकारी (जो उपयोगकर्ता द्वारा चेकबॉक्स को क्लिक करके हटा दिया जाता है) को onClicked , जैसे कुछ पर:

CheckBox {
    checked: user.status
    onClicked: {
        user.status = checked;
        checked = Qt.binding(function () { // restore the binding
            return user.status;
        });
    }
}

यह समस्या से बचा जाता है, यदि आपके पास समय पर अपने मॉडल का उपयोग करने की संभावना नहीं है, तो COMPONENT।





qt-quick