2011-03-04 14 views
8

Yerel glassfish kurulumumda .benim için küçük bir GUI oluşturmaya çalışıyorum. SO dosya adı alanı, bir onay kutusu ve savaş/kulak dosyasını bulmak için bir dosya iletişim kutusu getirmek için bir düğme içeren beş satır yaptım. Tüm düğmelerin, 'u aynı işlevle çağırması ve çağrıyı yapan beş düğmesinden hangilerini (doğru metin alanlarını güncellemek için) ayırması iyi olurdu. Bu nesne yönelimli bir şekilde bunu yapmak için amaçlanan yol ise, bilmiyorum ama benim tek GUI programlama deneyimim bazı eski win16 olay döngüler :) 'dir.Tıklatılan bir olaydan çağrı alma düğmesi

// BRG Anders Olme

+0

Çoğu Pyside soruları da Qt'dir. Cevapları daha hızlı almak istiyorsanız sorularınızı Qt etiketi ile etiketlemeyi düşünebilirsiniz. PyQt'den çok daha genç olan ve daha az bilinen Pyside için özellikle doğrudur. –

+0

Cevabıma buradan bakın: http://stackoverflow.com/questions/5153157/passing-an-argument-to-a-slot/5153522#5153522. 'Int' yerine, 'QString'i kullanmak isteyeceksiniz. – TonyK

+0

Çalışıyor görünüyor :) – Buzzzz

cevap

8

Bağlan her düğmenin click() biriyle sinyal ve aynı yuvası ve sinyal (tıklanan oldu) gönderilen hangi düğme öğrenmek için bu yuvaya QObject * QObject::sender() const [protected] kullanın. Alternatif olarak, bu tür bir görev için yapılmış özel bir sınıf olan QSignalMapper'u kullanabilirsiniz.

9
QPushButton *buttonA = new QPushButton("A"); 
QPushButton *buttonB = new QPushButton("B"); 
QPushButton *buttonC = new QPushButton("C"); 

buttonA->setObjectName("A"); 
buttonB->setObjectName("B"); 
buttonC->setObjectName("C"); 

connect(buttonA, SIGNAL(clicked()), this, SLOT(testSlot())); 
connect(buttonB, SIGNAL(clicked()), this, SLOT(testSlot())); 
connect(buttonC, SIGNAL(clicked()), this, SLOT(testSlot())); 

//Now in slot implementation 
void QWidget::testSlot() 
{ 
    QObject *senderObj = sender(); // This will give Sender object 
    // This will give obejct name for above it will give "A", "B", "C" 
    QString senderObjName = senderObj->objectName(); 

    if(senderObjName == "A") 
    { 
    //Implement Button A Specific 
    } 
    //Similarly for "B" and "C" 
    if(senderObjName == "B") 
    { 
    //Implement Button B Specific 
    } 
    if(senderObjName == "C") 
    { 
    //Implement Button C Specific 
    } 
} 

Böyle bir durumu uygulamak için bu yöntemi kullandım çünkü kod daha okunabilir ancak String karşılaştırması geldiğinde zaman alıcı olabilir. Teşekkür ederiz!

İlgili konular