我正在尝试为我的QGraphicsScene创建一个自定义图形项目,当我尝试构建项目时,我收到标题中提到的错误。以下是我设置的方法:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setSceneRect(0, 0, 640, 640);
this->button = new EllipseButton::EllipseButton(20, 20);
this->scene->addItem(this->button);
}
MainWindow::~MainWindow()
{
delete ui;
}
#ifndef ELLIPSEBUTTON_H
#define ELLIPSEBUTTON_H
#include <QGraphicsEllipseItem>
#include <QPainter>
class EllipseButton : public QGraphicsEllipseItem
{
public:
EllipseButton();
EllipseButton(int x, int y);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
bool pressed;
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private:
int x;
int y;
};
#endif // ELLIPSEBUTTON_H
#include "ellipsebutton.h"
EllipseButton::EllipseButton(){
this->x = 0;
this->y = 0;
this->pressed = false;
}
EllipseButton::EllipseButton(int x, int y){
this->x = x;
this->y = y;
this->pressed = false;
}
void EllipseButton::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){
QPen pen(Qt::red, 1);
painter->setPen(pen);
if (pressed){
pen.setColor(Qt::blue);
} else {
pen.setColor(Qt::red);
}
painter->drawEllipse(this->x, this->y, 20, 20);
}
void EllipseButton::mousePressEvent(QGraphicsSceneMouseEvent *event){
this->pressed = true;
update();
QGraphicsEllipseItem::mousePressEvent(event);
}
void EllipseButton::mouseReleaseEvent(QGraphicsSceneMouseEvent *event){
this->pressed = false;
update();
QGraphicsEllipseItem::mouseReleaseEvent(event);
}
所以在主窗口中,我有一个EllipseButton类型的私有成员,我通过调用
进行实例化this->button = new EllipseButton::EllipseButton(20, 20);
但是这会抛出错误,我之前也尝试过没有classname的构造函数,然后我得到以下内容:
this->button = new EllipseButton(20, 20);
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl EllipseButton::EllipseButton(int,int)" (??0EllipseButton@@QEAA@HH@Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)
最后,我不太确定我的构造函数有什么问题,因为这似乎是个问题。
编辑:添加了mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsScene>
#include "ellipsebutton.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
EllipseButton *button;
};
#endif // MAINWINDOW_H