QT - 检测按下了哪个按钮

时间:2018-04-25 18:35:00

标签: c++ qt

我对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!");
}

变量buttonsvector

QPushButton *

2 个答案:

答案 0 :(得分:1)

调用插槽所在对象的方法sender(),而不是QApplication的静态成员。

换句话说,删除QApplication ::并且您的代码应该按预期工作。

答案 1 :(得分:0)

sender()返回QObject。你需要QPushButton所以你必须使用铸造。这段代码可以使用:

QPushButton *button = qobject_cast<QPushButton*>(sender());
button->setText("New Text");
相关问题