//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsView>
#include "graphicsscene.h"
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QGraphicsView *graph;
QWidget *buttonsWidget;
QWidget *statusWidget;
CustomScene *scene;
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
graph = ui->graphicsView; // Initialize pointer for graphics view
scene = new CustomScene(); // Тут ошибка
scene->setSceneRect(ui->graphicsView->rect()); // Set size and positon for scene
scene->addLine(0,0,200,200); // Test
graph->setScene(scene); // Set scene on graphics view
statusWidget = ui->StatusWidget; // Initialize pointer for own widget "Status Widget"
}
MainWindow::~MainWindow()
{
delete scene;
delete ui;
}
//graphicsscene.h
#ifndef GRAPHICSSCENE_H
#define GRAPHICSSCENE_H
#include <QObject>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
class CustomScene : public QGraphicsScene
{
Q_OBJECT
public:
explicit CustomScene(QObject *parent = 0);
~CustomScene();
signals:
// Сигнал для передачи координат положения курсора мыши
void signalTargetCoordinate(QPointF point);
public slots:
private:
// Функция, в которой производится отслеживание положения мыши
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
};
#endif // GRAPHICSSCENE_H
//graphicsscene.cpp
#include "graphicsscene.h"
CustomScene::CustomScene(QObject *parent) :
QGraphicsScene()
{
Q_UNUSED(parent);
}
CustomScene::~CustomScene()
{
}
void CustomScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
emit signalTargetCoordinate(event->scenePos());
}
给出错误消息:
mainwindow.obj:-1:错误:LNK2019:未解析的外部符号引用“public: __thiscall CustomScene::CustomScene(class QObject *)”(??0CustomScene@@QAE@PAVQObject@@@Z) 在函数“public: __thiscall MainWindow”中::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z)`
如果你双击它,它会写Файл не найден в:mainwindow.obj.
如果我会在mainwindow.h我的声明CustomScene并在 中定义mainwindow.cpp,那么没有错误,但我如何确保其他文件中有 CustomScene?
在创建 QObject 的新后代时,需要重新启动元对象编译。通常会在当前项目的目录旁边创建名为 build-qtcreator-Desktop_Qt_5_10_0_clang_64bit-Debug 的文件夹。尝试删除这个。或者通过 Qt Creator 本身的构建菜单
似乎这也可以从 Qt Creator 本身完成,但我总是删除带有 QMake 实用程序生成的元对象代码的文件夹。
您没有构造函数定义
CustomScene(QObject *),更准确地说,有一个声明并且它在 中是“可见的”MainWindow,但没有定义(即主体)。要么您没有在项目中包含.cpp定义所需构造函数的文件,要么现有构造函数具有不同的参数集。