Как отключить QPushButton
Я создал много QPushButtons, добавил сигнал щелчка и имя слота'deneme() 'ко всем кнопкам с QT DESIGNER
и вещь, которую я хочу сделать; когда я нажимал любую кнопку, нужно выполнить некоторую операцию, и, наконец, кнопка должна быть отключена, но мы не знаем, какую кнопку нажать. Я знаю, что могу отключить кнопки с setEnabled()
и isEnabled()
, но я не знаю, как их отключить.
Ответы
Ответ 1
Если я правильно понял, вы подключили различные QPushButtons к одному слоту. Внутри слота deneme() вы хотите узнать, какая из кнопок была нажата.
Вы можете сделать что-то вроде:
void deneme() {
QPushButton * b = qobject_cast<QPushButton *>(sender());
if (b) {
if (b == button1) { //button1 clicked
//doSomethin();
}
else {
if (b == button2) {
//doSomething();
}
}
b->setEnabled(false);
}
}
Ответ 2
Почему setEnabled не работает? Ссылка.
Итак, простой setEnabled (false); достаточно.
QPushButton* button = new QPushButton(someParent);
button->setEnabled(false);
Если подключение обработчика событий в событии клика кнопки, возможно, вам следует посмотреть документацию QT:
Сигнал и слоты
Ответ 3
Вы хотите, чтобы кнопка была отключена сразу после нажатия на нее? Думаю, в этом случае вы, вероятно, захотите сделать что-то вроде этого:
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);
}
Ответ 4
Ответ Бруно правильный.
sender();
возвращает a QObject*
Вы можете применить его к QPushButton*
используя
C Литой стиль i.e QPushButton* clickedButton = (QPushButton*)(sender())
или
QPushButton* clickedButton = static_cast<QPushButton*>(sender())
или
QPushButton * clickedButton = qobject_cast (отправитель());
насколько я знаю, qobject_cast работает подобно dynamic_cast < > в С++. Но если у вас возникают проблемы с компиляцией, любое решение, приведенное выше, должно работать нормально.