添加按钮时出错,即使存在这样的插槽,也不存在



这是我得到的完整错误,我的构建文件夹中确实有moc文件我正在尝试调试,并且此消息显示

Debugging starts
    QObject::connect: No such slot MainWindow::numberClicked(QString buttonInput) in ..calculatormainwindow.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);
    }
    }

感谢您的阅读

您应该使用新的信号/插槽语法。

如果您真的无法更改MainWindow::numberClicked声明(尽管重载它将是显而易见的解决方案(,那么您可能只使用 lambda(未经测试(......

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

还要注意的是,使用新语法时,不需要显式声明插槽 - 它们只是普通函数。

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

什卢尔德·

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

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

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

如果你不想改变你的函数,你可以重载它。

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

相关内容

  • 没有找到相关文章

最新更新