添加按钮时出错,即使它存在,也不存在此类插槽

时间:2018-03-10 13:44:28

标签: c++ qt qt5 slots

这是我得到的完整错误,我的构建文件夹中有moc文件 我正在尝试调试和此消息apears

Debugging starts
    QObject::connect: No such slot MainWindow::numberClicked(QString buttonInput) in ..\calculator\mainwindow.cpp:14
    QObject::connect:  (sender name:   'pushButtonNr0')
    QObject::connect:  (receiver name: 'MainWindow')

这是我的头文件,我有其他人建议的Q_Object

    class MainWindow : public QMainWindow {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();

    private slots:

        void numberClicked(QString buttonInput);

这是我的cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    _ui(new Ui::MainWindow) {
    _ui->setupUi(this);

    _inputSwitchDen = true;

    connect(_ui->pushButtonNr0, SIGNAL(clicked()), this, SLOT(numberClicked(QString buttonInput)));

这是函数

void MainWindow::numberClicked(QString buttonInput = "") {
    QPushButton *clickedButton = qobject_cast<QPushButton *> (sender());
    if (buttonInput == "") {
    buttonInput = clickedButton->text();
    }


    _ui->labelMessage->setText("");


    if (_inputSwitchDen) {
    if (_ui->lineDen->text() == "1")
        _ui->lineDen->setText(buttonInput);
    else {
        _ui->lineDen->setText(_ui->lineDen->text() + buttonInput);
    }
    } else {
    if (_ui->lineNum->text() == "0") {
        _ui->lineNum->setText(buttonInput);

    } else {
        _ui->lineNum->setText(_ui->lineNum->text() + buttonInput);
    }
    }

感谢您阅读

2 个答案:

答案 0 :(得分:0)

connect(_ui->pushButtonNr0, SIGNAL(clicked()), this, SLOT(numberClicked(QString buttonInput)));

应该是

connect(_ui->pushButtonNr0, SIGNAL(clicked()), this, SLOT(numberClicked()));

connect(_ui-&gt; pushButtonNr0,SIGNAL(clicked()),this,SLOT(numberClicked(QString buttonInput)));

没有“QString buttonInput”,因为点击信号无法传递参数。

如果您不想更改功能,可以将其重载。

void numberClicked() {
    numberClicked("");
}

void numberClicked(QString buttonInput) {
}

答案 1 :(得分:0)

您应该使用new signal/slot syntax

如果你真的不能更改MainWindow::numberClicked的声明(尽管重载它将是明显的解决方案)那么你可能只使用lambda(未经测试)。

connect(_ui->pushButtonNr0, &QPushButton::clicked, this,
        [this]()
        {
          numberClicked();
        });

另请注意,使用新语法时无需明确声明插槽 - 它们只是普通的功能。