我有一个我的Rectangle类没有被视为一种类型的问题。我已经包含了正确的标题,所以我很困惑。

shapes.h

#ifndef SHAPES_H
#define SHAPES_H

#include "Colors.h"
#include <QPoint>
#include "glwidget.h"

//class GLWidget;

class Shape
{
    public:

        virtual void draw();
};

class Rectangle : Shape
{
    public:
        Rectangle(GLWidget *w, QPoint tl, QPoint br){
            glWidget = w;
            topLeft = tl;
            btmRight = br;
        }

        virtual void draw(){
              // top horizontal
            for(int i = topLeft.x(); i < btmRight.x(); i++){
                 glWidget->setPixel(i,topLeft.y(), color);
             }
        }

    private:
        QPoint topLeft,btmRight;
        GLWidget *glWidget;
        RGBColor color;
};

#endif // SHAPES_H


glwidget.cpp

#include <QtGui>
#include <QtOpenGL>

#include <math.h>
#include <stdio.h>
#include "glwidget.h"

#include "Shapes.h"

#ifndef GL_MULTISAMPLE
#define GL_MULTISAMPLE  0x809D
#endif

// ...   a bunch of code that doesn't need to be included

void GLWidget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton){
        // do some drawing stuff
        QPoint mPos = event->pos();

        switch(drawmode)
        {
            case 1:
               currentShape = new Rectangle(this,mPos, mPos);  /***  This is the error ***/
        }

    }
}


glwidget.h

#ifndef AGLWIDGET_H
#define AGLWIDGET_H

#include <QGLWidget>

#include "Colors.h"

class Shape;

class GLWidget : public QGLWidget
{
    Q_OBJECT

public:
    GLWidget(QWidget *parent = 0);
    ~GLWidget();

    QSize minimumSizeHint() const;
    QSize sizeHint() const;

    void setPixel(int x, int y, RGBColor c);

public slots:
    void setColor(RGBColor c);
    void setDrawRectangle();

protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);

private:

    QPoint lastPos;
    QVector<QPoint> drawPoints;
    RGBColor paintColor;
    int drawmode;
    Shape *currentShape;

};


对不起,代码加载中...确切的错误是
'Rectangle'不是glwidget.cpp类型的行85

任何人都有一个想法,为什么尽管我包含了“ Shapes.h”,但在glwidget.cpp中为什么不会将Rectangle作为类型?
提前致谢!

最佳答案

这有点远,但是您确定在GLWidget代码方面正确使用了moc吗? IE,您是否已将#include "glwidget.moc添加到.cpp文件或将其包含在构建系统中(qmake知道会为您执行此操作),以及首先运行moc。我之所以仅提及这一点,是因为许多月以前忘记这样做了,这使我看到了一堆与类型有关的难以理解的警告和错误。

08-27 21:40