#c #eclipse #qt
#c #eclipse #qt
Вопрос:
Я не могу найти никакого решения проблемы. Я создал пользовательский интерфейс с помощью qt и хотел реализовать функцию для кнопки. Это сработает, если я удалю кнопки в заголовочном файле.
Ошибка
/usr/bin/ld: CMakeFiles/QT3.dir/QT3_autogen/mocs_compilation.cpp.o: в функции
MainWindow::qt_metacall(QMetaObject::Call, int, void**)': mocs_compilation.cpp:(.text 0x10a): undefined reference to
MainWindow::on_nextStep_clicked()’ /usr/bin/ld: CMakeFiles/QT3.dir/QT3_autogen/mocs_compilation.cpp.o: в функцииMainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)': mocs_compilation.cpp:(.text 0x41): undefined reference to
MainWindow:: on_nextStep_clicked()’
Файл заголовка
#ifndef MAINWINDOW3_H_
#define MAINWINDOW3_H_
#include <QMainWindow>
#include <opencv2/highgui/highgui.hpp>
#include <QGraphicsScene>
//QT_BEGIN_NAMESPACE
//namespace Ui { class MainWindow; }
//QT_END_NAMESPACE
namespace Ui {
class MainWindow;
}
class MainWindow: public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
private slots:
// void on_pushButton_5_clicked(); // add Wall
// void on_pushButton_clicked(); // oben
// void on_pushButton_2_clicked(); // links
// void on_pushButton_3_clicked(); // rechts
// void on_pushButton_4_clicked(); // unten
void on_pushButton_clicked();
void on_nextStep_clicked();
private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
protected:
// bool eventFilter(QObject *, QEvent *);
};
#endif /* MAINWINDOW3_H_ */
Cpp-файл
#include "mainwindow3.h"
#include "ui_mainwindow.h"
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QDebug>
#include <QMouseEvent>
#include <QObject>
#include <iostream>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
// ui->graphicsView->installEventFilter(this);
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::on_pushButton_clicked() {
std::cout << "add btn clicked()" << std::endl;
}
Комментарии:
1. Какую версию Qt вы используете? Часть Qt3 кажется запутанной.
2. его версия 5.12.8. извините за путаницу, но это мой третий тестовый проект qt и другие мои проекты работают нормально.
3. Ваш код показывает, что вы не реализовали
on_nextStep_clicked()
в своем cpp-файле.4. Я знаю, что если я реализую on_nextStep_clicked(), это сработает, но это не сработало с кнопками, и я назвал их правильно.
5. Затем вам нужно удалить
void on_nextStep_clicked();
из вашего заголовка, поскольку для того, чтобы это было в вашем заголовке в слоте, требуется, чтобы функция была определена в файле .cpp.
Ответ №1:
слот — это просто еще один метод в Qt для событий asyn
если вы определяете в заголовке:
void on_nextStep_clicked();
тогда вам нужна реализация в cpp:
void MainWindow::on_nextStep_clicked()
{
qDebug() << "Hallo Welt!";
qDebug() << "on_nextStep_clicked()";
}