Код Qt не компилируется, когда я пытаюсь подключить один сигнал к слоту.

Я новичок в Qt. Я пытаюсь реализовать очень простую программу калькулятора. Просто пытаюсь поставить кнопку, и когда ее нажали, я хочу, чтобы она напечатала " Привет, Мир!"на следующий lineEdit. Он работает нормально, когда у меня есть только одна кнопка, но когда я добавляю вторую, она не компилируется. И так как я кодирую калькулятор, мне понадобятся эти кнопки.

вот ошибки:

C:UsersuserDesktopCalcbuild-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debugdebugmoc_mainwindow.o:-1: In function `ZN10MainWindow18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv':
C:UsersuserDesktopCalcbuild-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debugdebugmoc_mainwindow.cpp:75: error: undefined reference to `MainWindow::on_pushButton_clicked()'
C:UsersuserDesktopCalcbuild-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debugdebugmoc_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 ответов


/ / это проблемная часть

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

Так, кажется, у вас есть три слота, в конечном итоге, вместо двух. Вам нужно будет реализовать другие по вашему желанию. Обратите внимание, что тексты выше просто заполнители для любых действий, которые вы планирую это сделать.