QtRuby के साथ उत्सर्जक विजेट के संदर्भ प्राप्त करना

मैं वर्तमान में सिग्नल को इस तरह के फ़ंक्शन से जोड़ रहा हूं:

 dashboard.ui.start_button_r1.connect(:clicked, dashboard.ui.start_button_r1, :handler)

where start_button_r1 is a QPushButton

अब मैं जो चाहता हूं वह हैंडलर के भीतर भेजने वाले विजेट का संदर्भ है, क्योंकि मैं इस सिग्नल को कई विगेट्स से जोड़ूंगा। आदर्श रूप में मैं अपने हैंडलर फ़ंक्शन को emitter तर्क प्राप्त करने के लिए चाहता हूं जिसके साथ मैं खेल सकता हूं। मैं Qt :: ऑब्जेक्ट ( हैंडलर कंटनर ) से विरासत में प्राप्त कक्षा के भीतर हैंडलर डाल सकता हूं और प्रेषक() , लेकिन फिर मैं सिग्नल को हैंडलर कोंटेनर की आंतरिक विधि से कैसे जोड़ूं? मैंने instance.method (: हैंडलर) की कोशिश की, लेकिन कनेक्ट उस तरह से स्लॉट प्राप्त नहीं करता है

मैं आमतौर पर पीईक्यूटी में इस दृष्टिकोण का उपयोग करता हूं, लेकिन यह पता नहीं लगा सकता कि रूबी के साथ इसे कैसे किया जाए। मुझे लगता है कि मैं कुछ गलत कर रहा हूं क्योंकि प्रेषक को QtRuby का उपयोग करके स्लॉट के भीतर से कैसे प्राप्त किया जाए, इस पर बहुत अधिक चर्चा नहीं है। यह आमतौर पर कैसे किया जाता है? मैंने QSignalMapper के बारे में पढ़ा है, लेकिन यह मेरे उपयोग के मामले के लिए बहुत अधिक लगता है।

0

1 उत्तर

सी ++ में ऐसा किया जा सकता है:

// inside handler method
QPushButton *tmpBtn= dynamic_cast(sender());

संपादित करें:

 A minimal example on how to do this in Ruby:

class SlotContainer < Qt::Object
   slots "handler()"

   def handler
    puts "called by: " + sender().to_s
   end
end

if $0 == __FILE__
    app = Qt::Application.new(ARGV) 
    ui = Ui_MainWindow.new
    container = SlotContainer.new
    window = Qt::MainWindow.new
    ui.setupUi(window)
    Qt::Object.connect(ui.pushButton, SIGNAL("clicked()"), container, SLOT("handler()"))
    window.show
    app.exec
end
0
जोड़ा
ज़रूर। यह सामान्य दृष्टिकोण है। हालांकि, QObject :: प्रेषक() एक उदाहरण विधि है और इसे मेरे स्लॉट से नहीं बुलाया जा सकता है। मैं हैंडलर कंटैनर ऑब्जेक्ट का हैंडलर हिस्सा बना सकता हूं और QObject से प्राप्त कर सकता हूं। तब मुद्दा सिग्नल को जोड़ रहा है। QtRuby एक प्रतीक की अपेक्षा करता है, लेकिन किसी वस्तु से उदाहरण विधि को संदर्भित करने के लिए मुझे किस प्रतीक का उपयोग करना चाहिए?
जोड़ा लेखक Juan Pablo Santos, स्रोत
मैं इसे आजमाने और रिपोर्ट करने जा रहा हूं। मुझे उम्मीद थी कि मुझे स्ट्रिंग फॉर्म का उपयोग करने की आवश्यकता नहीं है।
जोड़ा लेखक Juan Pablo Santos, स्रोत
ठीक है, यह काम करता है। केवल स्लॉटकॉन्टेनर क्लास को हैंडलर को स्लॉट बनाने के लिए स्लॉट फ़ंक्शन को कॉल करना होगा। मैं आपके कोड को अपने कोड के साथ संपादित करूंगा और आपको प्रतिनिधि दूंगा :) धन्यवाद!
जोड़ा लेखक Juan Pablo Santos, स्रोत
शायद एक अति उत्साही मोड। एक बार फिर से धन्यवाद।
जोड़ा लेखक Juan Pablo Santos, स्रोत
@JuanPablo कनेक्ट (dashboard.ui.start_button_r1, सिग्नल (क्लिक किया गया)), संदर्भ_to_instance_of_Handler_Container, SLOT (हैंडलर ()); हालांकि मुझे सिग्नल (क्लिक ()) और SLOT का सटीक वाक्यविन्यास नहीं पता है (हैंडलर ()) QtRuby में वाक्यविन्यास
जोड़ा लेखक Shf, स्रोत
@ जुआन पाब्लो <�कोड> क्यूटी :: ऑब्जेक्ट.कनेक्ट (@ dashboard.ui.start_button_r1, सिग्नल ("क्लिक किया गया)), @reference_to_instance_of_Handler_Container, SLOT (" हैंडलर() ")) भी, आपको यह मिल सकता है लिंक उपयोगी - ruby-forum.com/topic/192770
जोड़ा लेखक Shf, स्रोत
@ जुआनपाब्लो मैं क्यूटीआरबी में बिल्कुल विशेषज्ञ नहीं हूं, क्यूआरआरबी में कनेक्ट होने के बारे में यह पहली बात है, यदि कोई अन्य सुविधाजनक तरीका है - इसका उपयोग करें, लेकिन कनेक्ट इस फ़ॉर्म में होना चाहिए - कनेक्ट करें (object_emmiting_signal, signal_itself, object_receiving_signal , receiving_slot_in_object) । इसे इस तरह से करना भी संभव हो सकता है: object_emitting_signal.connect (सिग्नल, object_receiving_signal, slot_in_object_receiving_signal)
जोड़ा लेखक Shf, स्रोत
@ जुआन पाब्लो खुश, यह आपकी मदद करता है, पता नहीं क्यों (QtRuby से जुड़े प्रश्न में QtRuby में यह कैसे किया जाता है, इस बारे में जानकारी जोड़ने का अर्थ है), आपका संपादन अस्वीकार कर दिया गया था और मैं इसके बाद इसे स्वीकार नहीं कर सका, इसलिए मैं जैसा कि आप चाहते थे इसे स्वयं संपादित करें
जोड़ा लेखक Shf, स्रोत