2010-11-10 18 views
20

मैं इनपुट के लिए क्यूएसलाइडर (v4.6) का उपयोग कर रहा हूं और साथ ही उपयोगकर्ता को फीडबैक प्रदान करता हूं। फीडबैक के लिए मैं setValue विधि को कॉल करूँगा। मैं एक संकेत खोजने की कोशिश कर रहा हूं जो केवल तभी आग लगेगा जब उपयोगकर्ता ने मूल्य को संशोधित किया हो। वैल्यू चेंज सिग्नल आग लगती है जब उपयोगकर्ता ने मूल्य बदल दिया और साथ ही जब मैं setValue को कॉल करता हूं। स्लाइडर केवल तभी चला जाता है जब उपयोगकर्ता स्लाइडर को ड्रैग करता है (कीबोर्ड का उपयोग करते समय नहीं)। मैंने एपीआई दस्तावेज़ों की जांच की और कुछ भी नहीं ढूंढ रहा है। क्या मैं कुछ भूल रहा हूँ? ऐसा कुछ ऐसा लगता है जो आम होगा। यदि कोई अन्य सिग्नल नहीं है, तो आप इस अनुशंसा को अनुकरण करने की सलाह कैसे देंगे? क्या मुझे setValue को कॉल करने से पहले ध्वज सेट करना चाहिए, जब भी मैं setValue को कॉल करता हूं तो डिस्कनेक्ट और सिग्नल को फिर से कनेक्ट करें ...?क्यूस्लाइडर वैल्यू चेंज सिग्नल

+1

अभी भी [Qt 5 के मूल्यChanged] (http://doc.qt.io/qt-5/qabstractslider.html#valueChanged) सिग्नल के लिए मान्य लगता है। – handle

+0

ध्यान दें कि ['सेट न्यूनतम()' और 'सेटमैक्सिम() '] (http://doc.qt.io/qt-4.8/qabstractslider.html#minimum-prop) स्लाइडर वैल्यू को एडजस्ट कर सकता है, वैल्यू चेंज सिग्नल ट्रिगर कर सकता है। – handle

उत्तर

32

अच्छा सवाल, मैंने एपीआई की जांच की और मुझे एक संकेत भी नहीं मिला जो केवल तभी ट्रिगर किया जाएगा जब उपयोगकर्ता द्वारा मूल्य संशोधित किया गया हो। वैकल्पिक हल आप प्रस्तावित ही एकमात्र विकल्प हो सकता है, बस ध्यान रखें कि आप डिस्कनेक्ट करने की जरूरत नहीं है/सभी संकेतों कनेक्ट में रखने के लिए, बस QObject::blockSignals विधि का उपयोग करें:

slider->blockSignals(true); 
slider->setValue(x); 
slider->blockSignals(false); 

आशा है कि मदद करता है।

+1

धन्यवाद Pawel! मुझे ब्लॉक सिग्नल के बारे में पता नहीं था। मुझे लगता है कि करना होगा। –

+12

शायद आप 'blockSignals (true) 'द्वारा दिए गए मान को संग्रहीत करना चाहते हैं और इसे' false' के बजाय दूसरे कॉल में उपयोग करना चाहते हैं। इस तरह अगर कुछ अन्य कोड पहले ही सिग्नल अवरुद्ध कर चुके हैं तो आप राज्य को गड़बड़ नहीं करेंगे। (मुझे आशा है कि यह समस्या असंभव है, लेकिन रक्षात्मक कोडिंग वैसे भी एक अच्छा विचार है।) –

+0

इस विधि को पायसाइड (पायथन बाइंडिंग) में लागू किया जा सकता है, और मैंने आवेदन किया। क्यूटी डिजाइनर में परिभाषित सिग्नल को छोड़कर, परिणाम अपेक्षित है। यदि आप एक स्लाइडर को क्यूटी डिज़ाइनर में प्रोग्रेस बार से कनेक्ट करते हैं और कहते हैं, "जब स्लाइडर का मान बदल जाता है, प्रगति पट्टी का मान सेट करें" और फिर उसके मान को अपडेट करने से पहले स्लाइडर के सिग्नल को अवरुद्ध करें, तो स्लाइडर का मान अपडेट किया गया है लेकिन प्रगति बार नहीं है। यही कारण है कि, संकेतों को डिस्कनेक्ट करना और कनेक्ट करना अधिक उपयुक्त है। – ceremcem

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