2011-04-19 50 views
15

Çok sayıda QPushButtons oluşturdum, tıklatılan sinyal eklendi ve QT DESIGNER ile tüm düğmelere ´deneme() ´ bir yuva eklendi ve yapmak istediğim şey; Herhangi bir tuşa bastığımda, bazı işlemler yapılmalı ve son olarak buton devre dışı bırakılmalı, ancak hangi butonun tıklandığından emin değiliz. Düğmeleri setEnabled() ve isEnabled() ile devre dışı bırakabileceğimi biliyorum, ancak bunları nasıl devre dışı bırakacağımı bilmiyorum.QPushButton nasıl devre dışı bırakılır

cevap

21

Doğru anladım Aynı yuvaya çeşitli QPushButtons bağladıysanız. Yuva deneme() içinde hangi düğmelerin tıklandığını bilmek istersiniz. Sen gibi bir şey yapabilirsiniz:

void deneme() { 
    QPushButton * b = qobject_cast<QPushButton *>(sender()); 
    if (b) { 
     if (b == button1) { //button1 clicked 
      //doSomethin(); 
     } 
     else { 
      if (b == button2) { 
      //doSomething(); 
      } 
     } 
     b->setEnabled(false); 
    } 
    } 
+0

Bu doğru olduğunu düşünüyorum ama "qobject_hd" bu kapsamda bildirilmemiş olsa bile hata veriyor "qobject.h" – Cengaver

6

Neden setEnabled çalışmıyor? The reference.

Yani basit bir setEnabled (false); yeterlidir.

QPushButton* button = new QPushButton(someParent); 
button->setEnabled(false); 

düğmesinin click olayı bir olay işleyicisi bağlayan varsa belki QT belgelerine bakmak gerekir: Signal and slots

+0

Sorun, Gui'yi oluşturdum ve Qt tasarımcısı ile tüm düğmeyi ekledim. Herhangi bir tuşa bastıktan sonra bazı işlemler yapılacak ve son olarak buton devre dışı bırakılmalıdır. – Cengaver

2

Sen Düğme sağ tıkladıktan sonra devre dışı olduğu anlamına? Ben muhtemelen böyle bir şey yapmak istiyorum bu durumda sanırım:

class MyWidget : public QWidget 
{ 
Q_OBJECT 

// ... 

private slots: 
    void disableButton(); 

private: 
    QPushButton *myButton; 

// ... 
}; 

MyWidget::MyWidget(QWidget *parent = NULL) : QWidget(parent) 
{ 

///... 
myButton = new QPushButton("click me", this); 
connect(myButton, SIGNAL(clicked), this, SLOT(disableButton)); 
// ... 
} 

void MyWidget::disableButton() 
{ 
myButton->setEnabled(false); 
} 
+0

Cevabınız muhtemelen doğrudur ama Sorun, Gui'yi oluşturdum ve Qt tasarımcısı ile tüm düğmeyi ekledim. Herhangi bir tuşa bastıktan sonra bir işlem yapılacak ve son olarak düğme devre dışı bırakılmalı ve bu programda çok yeniyim :( – Cengaver

+1

Sorununuz, bu yöntemde hangi tuşa basıldığını tanımlayamıyorsunuz demektir. QSignalMapper'ı kullanmanız yeterlidir.Onuzlu parametreleri (QPushButton'da tıklatılmış() sinyali gibi) bir parametreyi kabul eden yuvalara eşlemenize olanak sağlar.Bu yüzden hangi tuşun belirlendiğini belirten parametre almak için yukarıdaki kod örneğindeki disableButton() yöntemini değiştirebilirsiniz. – beduin

+0

Çok teşekkür ederim – Cengaver

0

Bruno'nun yanıt doğrudur.

sender(); 

bir QObject* kullanarak bir QPushButton* için döküm için döner ya C tipi dökme yani QPushButton* clickedButton = (QPushButton*)(sender()) veya QPushButton* clickedButton = static_cast<QPushButton*>(sender()) veya QPushButton * clickedButton = qobject_cast (gönderici()); bildiğim kadarıyla qobject_cast, dynamic_cast <> C++ 'dakine benzer çalışır. Fakat derleme problemleri yaşıyorsanız, yukarıda verilen herhangi bir çözüm işe yaramaz.

+0

Çok teşekkür ederim – Cengaver

İlgili konular