C ++和Qt C2061:语法错误:标识符'{ctor}'

时间:2016-10-05 10:32:20

标签: c++ qt constructor

我正在尝试为我的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;
}

EllipseButton标题

#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

EllipseButton类定义

#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

0 个答案:

没有答案