36 Stimmen

Wie man einen QPushButton deaktivieren kann

Ich habe eine Vielzahl von QPushButtons , fügte ein Klick-Signal und einen Slot-Namen 'deneme()' zu allen Schaltflächen mit QT DESIGNER und die Sache, die ich tun möchte, ist; wenn ich eine beliebige Schaltfläche angeklickt habe, sollte eine Operation durchgeführt werden und schließlich sollte die Schaltfläche deaktiviert werden, aber wir wissen nicht, welche Schaltfläche angeklickt wurde. Ich weiß, dass ich die Schaltflächen deaktivieren kann mit setEnabled() y isEnabled() aber ich weiß nicht, wie ich sie deaktivieren kann.

45voto

bruno Punkte 2704

Wenn ich richtig verstanden habe, haben Sie verschiedene QPushButtons auf denselben Steckplatz. Im Inneren des Schlitzes deneme() Sie wollen wissen, welche der Tasten clicked . Sie können etwas tun wie:

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

13voto

RvdK Punkte 19035

Warum funktioniert setEnabled dann nicht? Die Referenz .

Daher reicht ein einfaches setEnabled(false); aus.

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

Wenn Sie einen Event-Handler auf das Click-Ereignis der Schaltfläche verbinden, sollten Sie vielleicht einen Blick in die QT-Dokumentation werfen: Signal und Steckplätze

2voto

beduin Punkte 7543

Sie meinen, der Button muss direkt nach dem Anklicken deaktiviert werden? Ich schätze, in diesem Fall möchten Sie wahrscheinlich so etwas tun:

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

1voto

O.C. Punkte 6621

Die Antwort von Bruno ist richtig.

sender();

gibt eine QObject* Sie können es an eine QPushButton* entweder mit C-Stilwurf, d.h. QPushButton* clickedButton = (QPushButton*)(sender()) または QPushButton* clickedButton = static_cast<QPushButton*>(sender()) oder QPushButton * clickedButton = qobject_cast(Absender()); Soweit ich weiß, funktioniert qobject_cast ähnlich wie dynamic_cast<> in C++. Aber wenn Sie Kompilierungsprobleme haben, sollte jede oben genannte Lösung funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X