【问题标题】:Qt code does not compile when i try to connect one signal to a slot当我尝试将一个信号连接到插槽时,Qt 代码无法编译
【发布时间】:2014-07-02 22:37:24
【问题描述】:

我是 Qt 的新手。我正在尝试实现一个非常简单的计算器程序。只是想放一个按钮,当它被点击时,我希望它打印“Hello,World!”到下一行编辑。当我只有一个按钮时它工作正常,但是当我添加第二个时,它不会编译。因为我正在编写一个计算器,所以我需要这些按钮。

以下是错误:

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!");
}

有谁知道如何解决这个问题?感谢您的宝贵时间。

【问题讨论】:

    标签: c++ qt qtcore qlineedit qt-signals


    【解决方案1】:

    //这是有问题的部分

    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!");
    }
    

    因此,您最终似乎拥有三个插槽,而不是两个。您将需要根据自己的意愿实施其他人。请注意,上面的文本只是您计划在其中执行的任何操作的占位符。

    【讨论】:

    • 啊,谢谢!我想当我删除一个旧连接时,Qt Creator 也会从代码中删除。显然没有。
    • @AtakanArıkan:是的,如果您不需要它们,只需删除它们在标题中的声明,然后重新生成 moc 文件。
    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多