Вопрос QGraphicsView

0

Я не понимаю, что происходит: когда я создаю объект QGraphicsView напрямую и добавляю сцену с помощью pixmap, все в порядке, на экране появляется pixmap:

scene.addPixmap(pix);
QGraphicsView graphicsView;
graphicsView.setScene(&scene);

Но когда я пытаюсь наследовать класс QGraphicsView с целью переопределения событий, ничего не происходит, и у меня есть белый экран без pixmap, но такие события, как изменение курсора, работают:

scene.addPixmap(pix);
DrawArea graphicsView;
graphicsView.setScene(&scene);

.h файл:

class DrawArea : public QGraphicsView
{
    Q_OBJECT
public:
    DrawArea(QWidget *parent = 0);
    ~DrawArea();
signals:
public slots:
    void mousePressEvent(QMouseEvent * e);
    void paintEvent(QPaintEvent *);
    void enterEvent(QEvent *e);
private:
QPoint coord;
};

.cpp файл:

DrawArea::DrawArea(QWidget *parent)
    : QGraphicsView(parent){

}

DrawArea::~DrawArea(){

}
void DrawArea::mousePressEvent(QMouseEvent * event){

}
void DrawArea::paintEvent(QPaintEvent *event){

}
void DrawArea::enterEvent(QEvent *event){
    viewport()->setCursor(Qt::CrossCursor);
}

Скажи мне, если что-то пропустило, спасибо заранее.

Теги:
qt
qt5.3

1 ответ

1
Лучший ответ

Вы должны обработать свои события. Попробуй это:

void DrawArea::mousePressEvent(QMouseEvent * event)
{
     //some actions
     QGraphicsView::mousePressEvent(event);
}

void DrawArea::paintEvent(QPaintEvent *event)
{
     //some actions
     QGraphicsView::paintEvent(event);
}

Кроме того, я думаю, что вам совсем не нужно paintEvent, делать все необходимое на сцене.

  • 0
    Это s working, thank you, but how it связано с setPixmap? Объясните немного больше, пожалуйста.
  • 0
    @Ivan В вашем производном DrawArea вы ничего не делаете, но вы должны хотя бы обработать событие, вы можете сделать это с помощью QGraphicsView::someEvent(event); когда вы вызываете setScene, вы тоже неявно вызываете paintEvent, но ваш paintEvent ничего не делает в вашем коде, но работает правильно в моем коде.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню