2014-11-15 3 views
0

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

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

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

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); 
} 

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

ответ

1

Необходимо обработать события. Попробуйте это:

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

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

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

+0

Он работает, спасибо, но как он связан с setPixmap? Объясните немного больше, пожалуйста. – Ivan

+0

@Ivan В вашей производной DrawArea вы ничего не делаете, но вы должны хотя бы обрабатывать событие, вы можете сделать это с помощью 'QGraphicsView :: someEvent (event);' когда вы вызываете setScene, вы также неявно вызываете paintEvent, но ваш paintEvent ничего не делает в вашем коде, но работает правильно в моем коде. – Chernobyl

+0

Спасибо. Теперь ясно. – Ivan

Смежные вопросы