这是我得到的完整错误,我的构建文件夹中确实有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) {
}