2010-11-11 16 views
14

तर्क गुजर रहा एक स्लॉट के लिए एक तर्क पारित करने के लिए नहीं कर पा रहे। अगर मैं कोई तर्क नहीं देता हूं, तो फ़ंक्शन ठीक से चलता है। अगर मैं एक तर्क (पूर्णांक) पास करता हूं, तो मुझे संकलन करते समय "ऐसा कोई नाम प्रकार नहीं" और "ऐसा कोई स्लॉट" त्रुटियां नहीं मिलती हैं।क्यूटी मुद्दा स्लॉट

मेरी शीर्ष लेख में, मैं घोषणा:

private slots: 
void addButton(int); 
signals: 
void clicked(int) 

मेरी main.cpp में, मैं करता हूँ:

int count; 
int count = 0; 
QPushButton* button = new QPushButton("Button"); 
_layout->addWidget(button); 
connect(button, SIGNAL(clicked(count), this, SLOT(addButton(count))); 

....

void Main::addButton(int count) { 

//do stuff with count 

} 

उत्तर

17

सेबस्टियन सही है कि आप जिस तरह से आप कोशिश कर रहे हैं में ऐसा नहीं कर सकते है, लेकिन क्यूटी एक वर्ग है कि आप आप चाहते हैं कार्यक्षमता देता है प्रदान करता है।

बाहर QSignalMapper चेक। यह आपको ऑब्जेक्ट/सिग्नल जोड़ी के साथ एक पूर्णांक को जोड़ने की अनुमति देता है। फिर आप सीधे बटन पर इसके सिग्नल से कनेक्ट होते हैं।

+1

आह, ऐसा लगता है कि यह काम करेगा। धन्यवाद! –

8

संकेत और स्लॉट एक ही संख्या और तर्क (ओं) का प्रकार होना चाहिए, और आप स्लॉट पर सिग्नल के तर्क (ओं) को केवल पास कर सकते हैं, न कि कोई वैरिएबल या वैल्यू जो आप चाहते हैं।

+0

कोड ऊपर प्रतिबिंबित करने के लिए मैं क्या करने की कोशिश की (एक उदाहरण मैंने पाया के आधार पर) संपादित, लेकिन अभी भी काम नहीं करता। –

+0

क्लिक किए गए() - संकेत बटन वर्ग द्वारा परिभाषित किया गया है, तो आप उसे बदल सकते हैं नहीं है (जब तक आप अपने खुद के बटन वर्ग लिख सकते हैं और ऐसा करते हैं, लेकिन मुझे शक है कि इस आप जो कुछ भी यहाँ करने के लिए कोशिश कर रहे हैं का हल है)। –

3

मैं इस के साथ तीन समस्याओं देख सकते हैं।

सबसे पहले, clicked() संकेत QPushButton द्वारा उत्सर्जित होता है (कोई पैरामीटर के साथ), लेकिन आप अपने खुद के वर्ग में यह फिर से परिभाषित करने के लिए (एक int पैरामीटर के साथ) की कोशिश कर रहे। यदि आप ऐसा करना चाहते हैं:

SignalClass* objectWithSignals = new SignalClass; 
SlotClass* objectWithSlots = new SlotClass; 
connect(objectWithSignals, SIGNAL(a()), objectWithSlots, SLOT(b())); 

तो आप केवल संकेत पहले से ही SignalClass में परिभाषित करने के लिए कनेक्ट कर सकते हैं। दूसरे शब्दों में, संकेत a()SignalClass, नहीं SlotClass का ही होना चाहिए।

(वास्तव में, clicked()QPushButton के आधार वर्ग QAbstractButton में परिभाषित किया गया है।)

दूसरे, connect() समारोह के अंदर, आप उनके पैरामीटर प्रकार साथ संकेत और स्लॉट हस्ताक्षर निर्दिष्ट करने के लिए की जरूरत है। तुम कहाँ connect() समारोह अंदर count है, यह int होना चाहिए।

और तीसरे, वहाँ एक ब्रैकेट अपने कॉल में लापता कनेक्ट करने के लिए है: SIGNAL(clicked(count))

उम्मीद है कि मदद करता है।

+0

मैं हैरान हूँ कि तुम्हारा ही जवाब है कि तर्क त्रुटि जहां एक वेरिएबल का नाम संकेत और कनेक्ट कॉल में स्लॉट में भेजा जाता है का उल्लेख है हूँ, नमूना कोड संकलन कभी नहीं होगा जब तक कि "गिनती" एक प्रकार है। – pixelgrease

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