web-dev-qa-db-fra.com

Comment désactiver un QPushButton

J'ai créé beaucoup de QPushButtons , ajouté un signal de clic et un nom de logement ´deneme () ´ à tous les boutons avec QT DESIGNER. Lorsque j'ai cliqué sur un bouton, certaines opérations doivent être effectuées et, enfin, le bouton doit être désactivé, mais nous ne savons pas sur quel bouton vous avez cliqué. Je sais que je peux désactiver les boutons avec setEnabled() et isEnabled() mais je ne sais pas comment les désactiver.

18
Cengaver

Si j'ai bien compris, vous avez connecté plusieurs variables QPushButtons au même emplacement. À l'intérieur de l'emplacement deneme(), vous voulez savoir lequel des boutons était clicked. Vous pouvez faire quelque chose comme:

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

Pourquoi setEnabled ne fonctionne-t-il pas alors? Le référence .

Donc, un simple setEnabled (false); est assez.

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

Si vous connectez un gestionnaire d’événements à l’événement click du bouton, consultez la documentation QT: Signal and slots

7
RvdK

Vous voulez dire que Button doit être désactivé juste après avoir cliqué dessus? Je suppose que dans ce cas, vous voudrez probablement faire quelque chose comme ceci:

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);
}
2
beduin

La réponse de Bruno est correcte.

sender();

renvoie un QObject*Vous pouvez le convertir en QPushButton*.__ à l'aide de la conversion de style C, à savoir QPushButton* clickedButton = (QPushButton*)(sender()).__ ou QPushButton* clickedButton = static_cast<QPushButton*>(sender()).__ ou QPushButton * clickedButton = qobject_cast (sender () ); autant que je sache, qobject_cast fonctionne de manière similaire à dynamic_cast <> en C++. Mais si vous rencontrez des problèmes de compilation, toute solution donnée ci-dessus devrait fonctionner correctement.

0
O.C.