Qt 'Rectangle' не является типом - когда прямоугольник объявлен как класс - PullRequest
0 голосов
/ 29 сентября 2010

У меня проблема с тем, что мой класс Rectangle не рассматривается как тип.Я включил правильный заголовок, и поэтому я в замешательстве.

shape.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

У кого-нибудь есть идеи, почему он не видит Rectangle кактип в glwidget.cpp несмотря на мое включение "Shapes.h"?Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 29 сентября 2010

Возможно, где-то в происхождении GLWidget есть метод или элемент, называемый Rectangle, и возникает путаница.См. Документацию по GLWidget и его предкам

1 голос
/ 29 сентября 2010

Это немного длинно, но вы уверены, что правильно используете moc в отношении кода GLWidget? IE, вы добавили #include "glwidget.moc в файл .cpp или включили его в свою систему сборки (qmake знает, как сделать это за вас), а также сначала запустили moc. Я упоминаю об этом только потому, что, забыв сделать это много месяцев назад, я увидел кучу непостижимых предупреждений и ошибок, связанных с типами.

0 голосов
/ 30 сентября 2010

Ну, я пойду с этим, что-то связано с тем, что виртуальная функция в Shape не определена, как в g ++ неопределенной ссылке на typeinfo . Машина, на которой у меня произошла странная ошибка, использует более старую версию Qt, чем у меня на моем персональном компьютере, и у меня нет проблем с этим кодом.

Спасибо за предложения всем, но я просто собираюсь положить это на отдых.

0 голосов
/ 29 сентября 2010

Похоже, что компилятор считает Rectangle шаблоном

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...