функция, объявленная в моем классе, не отображается в области видимости - PullRequest
0 голосов
/ 21 января 2011

в моем .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 ]

2 голосов
/ 21 января 2011
void wheelEvent ( QGraphicsSceneWheelEvent * event ) 

должен сказать

void ImagePixmapItem::wheelEvent ( QGraphicsSceneWheelEvent * event )

, а также добавить это к .h

protected:
    void wheelEvent ( QGraphicsSceneWheelEvent * event );
1 голос
/ 21 января 2011

wheelEvent является свободной функцией и поэтому не может вызывать функцию-член ImagePixmapItem::setSize без экземпляра ImagePixmapItem.

0 голосов
/ 21 января 2011

В функции WheelEvent отсутствует ImagePixMapItem :: впереди, что означает, что вам действительно нужно переопределить эту функцию из класса QGraphicsPixmapItem

, поэтому в заголовке должно быть

:

protected:
    virtual void wheelEvent(QGraphicsSceneWheelEvent *event)

и в cpp

void ImagePixmapItem::wheelEvent(QGraphicsSceneWheelEvent *event)

Также вы должны заметить, что поскольку вы переопределяете WheelEvent, его реализация в QGraphicsItem-class никогда не вызывается, поэтому вам также следует вызывать реализацию функции базовыми классами:

QGraphicsPixmapItem::wheenEvent(event); 
0 голосов
/ 21 января 2011

Это потому, что setSize не объявлено в области действия wheelEvent.Функция setSize является функцией-членом класса ImagePixmapItem, поэтому для вызова setSize необходим экземпляр этого класса.

0 голосов
/ 21 января 2011

void wheelEvent ( QGraphicsSceneWheelEvent * event ) не является членом класса ImagePixmapItem, тогда как setSize () является.Поэтому для вызова setSize () вам нужно либо сделать wheelEvent () членом класса ImagePixmapItem, либо передать объект типа ImagePixmapItem, а затем вызвать ImagePixmapItemObject.setSize( ... ).

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