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.
Antworten
Zu viele Anzeigen?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);
}
}
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
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);
}
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.