在我的类中声明的函数未在范围中显示

时间:2011-01-21 16:00:21

标签: c++ qt

在我的.h:

class ImagePixmapItem: public QGraphicsPixmapItem
    {
    public:
    void setSize(qreal size);
    private:
    qreal size;
};

在我的类文件中,我现在有两个函数:

#include "imagepixmapitem.h"
#include <QGraphicsSceneWheelEvent>

ImagePixmapItem::ImagePixmapItem(const QPixmap &pixmap, QGraphicsItem *parentItem)
: QGraphicsPixmapItem(pixmap,parentItem)
    {
    setCacheMode(NoCache);
    }

ImagePixmapItem::~ImagePixmapItem()
    {
    }

void ImagePixmapItem::setSize(qreal size)
    {
    this->size = size;
    }
void wheelEvent ( QGraphicsSceneWheelEvent * event ){
    qreal size = 1.2;
    if (event->delta() < 0)
      size = 1.0 / size;
    setSize(size);
}

但我在setSize上收到错误:

../ IMViewer / imagepixmapitem.cpp:42:错误:'setSize'未在此范围内声明

我在这里做错了什么?

5 个答案:

答案 0 :(得分:2)

void wheelEvent ( QGraphicsSceneWheelEvent * event ) 

应该说

void ImagePixmapItem::wheelEvent ( QGraphicsSceneWheelEvent * event )

并将其添加到.h

protected:
    void wheelEvent ( QGraphicsSceneWheelEvent * event );

答案 1 :(得分:1)

wheelEvent是一个自由函数,因此如果没有ImagePixmapItem::setSize的实例,则无法调用成员函数ImagePixmapItem

答案 2 :(得分:0)

void wheelEvent ( QGraphicsSceneWheelEvent * event )不是ImagePixmapItem类的成员,而setSize()是。{1}}。因此,要调用setSize(),您需要将wheelEvent()作为ImagePixmapItem类的成员,或者传递ImagePixmapItem类型的对象,然后调用ImagePixmapItemObject.setSize( ... )

答案 3 :(得分:0)

那是因为setSize未在函数wheelEvent的范围内声明。函数setSize是类ImagePixmapItem的成员函数,因此要调用setSize,您需要该类的实例。

答案 4 :(得分:0)

WheelEvent-function在前面缺少ImagePixMapItem ::这意味着你实际上需要从QGraphicsPixmapItem覆盖该函数 类

所以应该有

标题中的

protected:
    virtual void wheelEvent(QGraphicsSceneWheelEvent *event)

和cpp

void ImagePixmapItem::wheelEvent(QGraphicsSceneWheelEvent *event)

另外你应该注意到,因为你重写了WheelEvent,它在QGraphicsItem-class中的实现永远不会被调用,所以你也应该调用该函数的基类实现:

QGraphicsPixmapItem::wheenEvent(event);