这是我得到的完整错误,我的构建文件夹中有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);
}
}
感谢您阅读
答案 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();
});
另请注意,使用新语法时无需明确声明插槽 - 它们只是普通的功能。