QT - определение, какая кнопка была нажата - PullRequest
0 голосов
/ 25 апреля 2018

У меня проблема с использованием Application::sender.У меня есть несколько QPushButtons и в одной функции я хочу определить, какая кнопка была нажата.

Я узнал, что использование Application::sender может быть решением, однако у меня есть проблемы с этим.А именно, я получаю две ошибки:

  • вызов нестатической функции-члена без аргумента объекта
  • 'sender' является защищенным членом 'QObject'

А вот мой код:

void MainWindow::on_button_click()
{
    unsigned long i=0;
    for(; i<buttons.size(); ++i)
    {
        if(buttons[i] == QApplication::sender())
            break;
    }
    if(checks[i]->checkState() == false)
        buttons[i]->setText("Undone");
    else
        buttons[i]->setText("Done!");
}

Где переменная buttons это vector из QPushButton *

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

sender () возвращает QObject. Вам нужен QPushButton, поэтому вы должны использовать кастинг. Этот код будет работать:

QPushButton *button = qobject_cast<QPushButton*>(sender());
button->setText("New Text");
0 голосов
/ 25 апреля 2018

Вызовите метод sender () объекта, в котором находится ваш слот, а не статический член QApplication.

Другими словами, удалите QApplication ::, и ваш код должен работать как положено.

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