2012-05-06 16 views
5

मेरी समस्या यह है कि जब मैं QMenuBar में किसी आइटम पर क्लिक करता हूं, तो इसी स्लॉट को दो बार बुलाया जाता है। मैं क्यूटी 4.8.1 का उपयोग कर रहा हूँ। मैं क्यूटी डिजाइनर और न ही "ऑटो-कनेक्शन" सुविधा का उपयोग नहीं कर रहा हूं।इस स्लॉट को दो बार क्यों बुलाया जाता है?

#include <iostream> 
#include <QWidget> 
#include <QMenuBar> 

class MyWidget : public QWidget 
{ 
     Q_OBJECT 
     public: 
       MyWidget(QWidget *parent = 0) : QWidget(parent) 
       { 
         QMenuBar *menu = new QMenuBar(this); 
         menu->addAction("Click here"); 
         menu->addAction("Or here"); 
         connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(handleAction(QAction*))); 
       } 

     public slots: 
       void handleAction(QAction *action) 
       { 
         std::cout << "Triggered" << std::endl; 
       } 

}; 

और मुख्य कार्य:

#include "main.h" 
#include <QApplication> 

int main(int argc, char **argv) 
{ 
    QApplication app(argc, argv); 
    MyWidget w; 
    w.show(); 

    return app.exec(); 
} 

आप (एमओसी फ़ाइल के साथ) इस संकलन, तो आप उस पर क्लिक "यहाँ क्लिक करें" प्रिंट होगा देखेंगे "यहाँ मेरी कोड स्निपेट है "एक बार, और" या यहाँ "दो बार ट्रिगर किया। मुझे समझ में नहीं आता क्यों।

मैं क्या गलत कर रहा हूं?

+0

क्षमा करें मैं अपने कोड संकलन और एक क्यूटी जादूगर नहीं कर रहा हूँ नहीं किया। लेकिन मैंने नोकिया के क्यूटी पृष्ठों (http://qt-project.org/doc/qt-4.8/mainwindows-menus.html) से उदाहरण देखा और मुझे लगता है कि वे ट्रिगर सिग्नल को कुछ स्लॉट में अलग-अलग में जोड़ते हैं रास्ता: जब आप सिग्नल कनेक्ट करते हैं (ट्रिगर (क्यूएक्शन *)) वे सिग्नल (ट्रिगर()) को कनेक्ट करते हैं। यह नहीं बता सकता कि इससे कोई फर्क पड़ता है लेकिन यह एक टिप्पणी है और उत्तर नहीं :-) – Matthias

+0

@ माथियास: वे क्रियाओं को उन उदाहरणों में सीधे स्लॉट से कनेक्ट करते हैं, पिनटोक कनेक्शन QMenuBar का सिग्नल है, जिसे वह काम करना चाहता है इसका इरादा है (सीधे कार्यों को बनाना और कनेक्ट करना एक कामकाज होगा, लेकिन अच्छा नहीं होगा - उसे अधिक स्लॉट या सिग्नल मैपर की आवश्यकता होगी ...) – Mat

+0

यह अस्पष्ट है कि आप यहां क्या करने की कोशिश कर रहे हैं, लेकिन मुझे संदेह है कि यह कुछ है अलग-अलग जो आप सोचते हैं - यह वास्तव में ओएसएक्स पर मेन्यूबार भी नहीं बनाएगा। आपको 'क्यूमेनू' ऑब्जेक्ट्स बनाना और उन्हें 'क्यूमेनूबार' में जोड़ना चाहिए। मुझे संदेह है कि यह सिर्फ आपके स्लॉट पर कार्यों की पूरी सूची भेज रहा है। –

उत्तर

2

मुझे क्यूटी 4.8.1 का उपयोग कर विंडोज 7 x64 पर एक ही गलत परिणाम मिलता है। यह निश्चित रूप से एक बग की तरह लगता है।

क्या हालांकि यह बंद कर दिया गया Mac OS X पर समान व्यवहार हो गया लगता है के लिए एक bug reported and fixed था, वहाँ इस पर एक भी टिप्पणी है कि वे विंडोज 7 पर इस समस्या को मनाया

मैं दाखिल लगता है एक नई बग रिपोर्ट एक अच्छा विचार होगा।

+0

मैं बग ट्रैकर पर एक नया मुद्दा बनाते हैं। आपके पुष्टिकरण के लिए धन्यवाद। – pintoch

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