2012-05-06 23 views
5

Sorunum, bir QMenuBar'daki bir öğeye tıkladığımda karşılık gelen yuvanın iki kez çağrılmasıdır. Qt 4.8.1 kullanıyorum. Qt Designer'ı veya "auto-connection" özelliğini kullanmıyorum.Bu yuva neden iki kez çağırılıyor?

#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; 
       } 

}; 

Ve ana işlevi: Eğer (MOC dosyasıyla) Bu derleme ise

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

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

    return app.exec(); 
} 

, sen tıklayarak "buraya tıklayın" yazdırmak görürsünüz "İşte benim kod parçacığı olduğunu "Bir kez ve" Veya burada "iki kez tetiklendi. Nedenini anlamıyorum.

Neyi yanlış yapıyorum?

+0

Maalesef ben kodunuzu derlemek değil ve bir qt sihirbaz değilim etmedi. Ama nokia'nın qt sayfalarından (http://qt-project.org/doc/qt-4.8/mainwindows-menus.html) örneklere baktım ve tetiklenen sinyali farklı bir yuvaya bağladıkları görülüyor. yol: SİNYAL (tetiklenen (QAction *)) bağlanırken SIGNAL (tetiklenen()) bağlanır. Bir fark yaratıp yaratmadığını söyleyemem ama bu bir yorum değil bir cevap :-) :-) – Matthias

+0

@Matthias: eylemleri bu örneklerde doğrudan yuvalara bağlarlar, pintoch bağlantı QMenuBar'ın sinyali olarak çalışır. onu amaçlamaktadır. (Doğrudan eylemler oluşturmak ve bağlamak bir geçici çözüm olabilir, ama hoş değil - daha fazla yuvaya veya bir sinyal eşleştiricisine ihtiyaç duyacak ...) – Mat

+0

Burada ne yapmak istediğinizi açık değil * ama bir şey olduğundan şüpheleniyorum. düşündüğünüzden farklı - Bu aslında OSX'de bir menü çubuğu üretmeyecek. “QMenu” nesneleri oluşturmalı ve bunları “QMenuBar” a eklemelisiniz. Şüpheliyim ki, tüm eylem listesini sadece yuvasına gönderiyor. –

cevap

2

Windows 7 x64 ile aynı hatalı sonucu Qt 4.8.1 kullanarak elde ediyorum. Bu kesinlikle bir böcek gibi görünüyor.

kapalı olmasına rağmen, Mac OS X'te aynı davranış gibi görünen bir bug reported and fixed vardı, üzerinde tek bir açıklama onlar dosyalama düşünüyorum

Windows 7'de bu sorunu gözlenen vardır yeni bir hata raporu iyi bir fikir olurdu.

+0

Hata izleyicide yeni bir sorun oluyorum. Onayınız için teşekkürler. – pintoch