Как сделать QPushButton отключенным - PullRequest
19 голосов
/ 19 апреля 2011

Я создал множество QPushButtons , добавил сигнал нажатия и имя слота ´deneme () ´ для всех кнопок с QT DESIGNER, и я хочу сделать следующее; когда я нажимал какую-либо кнопку, нужно было выполнить некоторую операцию, и, наконец, кнопка должна быть отключена, но мы не знаем, какая кнопка была нажата. Я знаю, что могу отключить кнопки с помощью setEnabled() и isEnabled(), но я не знаю, как их отключить.

Ответы [ 4 ]

26 голосов
/ 19 апреля 2011

Если я правильно понял, вы подключили различные QPushButtons к одному и тому же слоту. Внутри слота deneme() вы хотите узнать, какая из кнопок была clicked. Вы можете сделать что-то вроде:

  void deneme() {
    QPushButton * b = qobject_cast<QPushButton *>(sender());
    if (b) {
       if (b == button1) { //button1 clicked
           //doSomething();
       } 
       else {
          if (b == button2) {
             //doSomething();
          }
       }
       b->setEnabled(false);
    }
  }
7 голосов
/ 19 апреля 2011

Почему setEnabled не работает тогда? Ссылка .

Итак, простой setEnabled (false); достаточно.

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

Если при подключении обработчика события к событию click кнопки, возможно, вам следует обратиться к документации QT: Сигнал и слоты

2 голосов
/ 19 апреля 2011

Вы имеете в виду, что кнопка должна быть отключена сразу после нажатия на нее?Я думаю, в этом случае вы, вероятно, захотите сделать что-то вроде этого:

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 голосов
/ 19 апреля 2011

Бруно ответ правильный.

sender();

возвращает QObject* Вы можете разыграть его до QPushButton* используя либо C стиль литой, т. Е. QPushButton* clickedButton = (QPushButton*)(sender()) или же QPushButton* clickedButton = static_cast<QPushButton*>(sender()) или же QPushButton * clickedButton = qobject_cast (sender ()); насколько я знаю, qobject_cast работает аналогично dynamic_cast <> в C ++. Но если у вас проблемы с компиляцией, любое из приведенных выше решений должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...