当我尝试将一个信号连接到一个槽时,Qt代码无法编译。

6

我是新手学习Qt。我正在尝试实现一个非常简单的计算器程序。只需要放置一个按钮,当其被点击时,我希望它将"Hello, World!"打印到下一个lineEdit中。当我只有一个按钮时,它正常工作,但是当我添加第二个按钮时,它无法编译。而且由于我正在编写一个计算器,我需要这些按钮。

以下是错误:

C:\Users\user\Desktop\Calc\build-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\moc_mainwindow.o:-1: In function `ZN10MainWindow18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv':
C:\Users\user\Desktop\Calc\build-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp:75: error: undefined reference to `MainWindow::on_pushButton_clicked()'
C:\Users\user\Desktop\Calc\build-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp:76: error: undefined reference to `MainWindow::on_pushButton_2_clicked()'

这是MainWindow方法:

void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
    if (_c == QMetaObject::InvokeMetaMethod) {
        MainWindow *_t = static_cast<MainWindow *>(_o);
        switch (_id) {
        case 0: _t->on_pushButton_clicked(); break;
        case 1: _t->on_pushButton_2_clicked(); break;
        case 2: _t->on_pushButton_11_clicked(); break;
        default: ;
        }
    }
    Q_UNUSED(_a);
}

以下是我如何建立连接的方法:

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}


// this is the problematic part
void MainWindow::on_pushButton_11_clicked()
{
    ui->lineEdit->setText("Hello, World!");
}

有人知道如何修复这个问题吗?感谢您的时间。

1个回答

5

// 这是有问题的部分

void MainWindow::on_pushButton_11_clicked()

确实如此。

您缺少以下两个方法的实现:

MainWindow::on_pushButton_clicked()
{
    ui->lineEdit->setText("Hello, World 2!");
}

并且

MainWindow::on_pushButton_2_clicked()
{
    ui->lineEdit->setText("Hello, World 3!");
}

所以,最终您将拥有三个插槽而不是两个。您需要按照自己的意愿实现其他插槽。请注意,上面的文本只是用于您计划在其中执行的任何操作的占位符。


1
啊,谢谢!我以为当我删除一个旧连接时,Qt Creator也会从代码中删除。显然它没有这样做。 - arikan
2
@AtakanArıkan: 是的,如果你不需要它们,只需在头文件中删除它们的声明,并重新生成moc文件。 - László Papp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接