2009-10-14 14 views
6

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

हम अपने आवेदन में प्लगइन का उपयोग कर रहे हैं और विभिन्न प्लगइन्स विभिन्न प्रकार की वस्तुओं के लिए ज़िम्मेदार हैं। हम मुख्य स्लॉट द्वारा उत्सर्जित एक संकेत के लिए, एक अलग प्लगइन में लागू कई स्लॉट कनेक्ट कर रहे हैं। सिग्नल के पैरामीटर में से एक QString सिग्नल से जुड़े ऑब्जेक्ट के प्रकार को इंगित करता है। वर्तमान में, हम इस पैरामीटर को स्लॉट में देख रहे हैं और प्लगइन द्वारा टाइप किए जाने पर आगे बढ़ें। इसका नकारात्मक हिस्सा है, हर प्लगइन यह जांच करता है और यदि संभव हो तो मैं इससे बचाना चाहता हूं।

मैं एक ही संकेत के लिए सभी स्लॉट कनेक्ट करना चाहते हैं, और जब संकेत उत्सर्जित होता है, केवल उपयुक्त स्लॉट QString तर्क के मूल्य के आधार कहा जाता है, एक तरह से एक QSignalMapper की तरह लेकिन एक अलग तरीके से।

क्या ऐसा करने के लिए कोई अंतर्निहित तंत्र है? यदि नहीं, तो इस पर कोई विचार है कि मैं इसे कैसे प्राप्त कर सकता हूं?

अग्रिम धन्यवाद।

उत्तर

3

मैं वहाँ उस के लिए एक घटक है नहीं लगता है, लेकिन आप इस तरह अपने खुद के संकेत नक्शाकार बना सकते हैं:

  1. मुख्य का संकेत सेट करने के लिए एक MySignalMapper घटक
  2. कोड एक addSourceSignal विधि बनाने ऐप
  3. एक addDestinationSlot विधि कोड जो QString/स्लॉट जोड़ी लेता है और स्लॉट पर स्ट्रिंग को मानचित्र करता है।
  4. आपके घटक में स्रोत सिग्नल को एक कस्टम स्लॉट से कनेक्ट करें जो qstring मान के आधार पर प्रेषण करता है। आप QMetaObject :: invokeMethod के साथ एक स्लॉट का आह्वान कर सकते हैं।
0

आप "प्रकार" स्ट्रिंग के अनुमत मानों को केवल वैध C++ फ़ंक्शन नामों तक सीमित कर सकते हैं। प्लगइन को उनके स्लॉट्स को उनके द्वारा प्रबंधित किए जाने वाले प्रकारों के अनुसार नाम देने के लिए मजबूर करें, फिर प्रत्येक प्लगइन के लिए उचित नामित स्लॉट को कनेक्ट करने का प्रयास करें।

दूसरे शब्दों में, आप क्या QMetaObject::connectSlotsByName, लागू छोड़कर अपनी खुद की नामकरण परंपरा कर सकता है।

1

क्यूक्स्ट में इस कार्यक्षमता के लिए बिल्कुल कक्षा है। आप QxtSlotMapper क्लास का उपयोग कर सकते हैं जो QxtCore मॉड्यूल में है।

http://libqxt.bitbucket.org/doc/tip/qxtslotmapper.html

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

  • कोई संबंधित समस्या नहीं^_^