Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: boriska от Декабрь 13, 2012, 11:27



Название: qpainter + qraphicsscene
Отправлено: boriska от Декабрь 13, 2012, 11:27
привет, подскажите как одновременно вывести два слоя:
первый рисуется qpainter-ом, вторая -QgraphicsScene, содержащая custom items?


Название: Re: qpainter + qraphicsscene
Отправлено: boriska от Декабрь 13, 2012, 12:46
привет, подскажите как одновременно вывести два слоя:
первый рисуется qpainter-ом, вторая -QgraphicsScene, содержащая custom items?
т.е. я сделал так:
в qraphicsview я переопределяю drawbackground(), где рисую qpainter-ом. по команде viewport().update() - перерисовываю.
в qgraphicsscene содержит произвольные item-ы, которые должны реагировать на действия мышки (перенос и т.д).

проблема в том, что в graphicsview я переопределил функцию mouseMoveEvent() и теперь item-ы в graphicsscene не реагируют на действия мышки (признак itemsmovable выставлен).

как решить этот момент?


Название: Re: qpainter + qraphicsscene
Отправлено: carrygun от Декабрь 13, 2012, 13:08
Покажи как переопределил.


Название: Re: qpainter + qraphicsscene
Отправлено: GreatSnake от Декабрь 13, 2012, 13:22
проблема в том, что в graphicsview я переопределил функцию mouseMoveEvent() и теперь item-ы в graphicsscene не реагируют на действия мышки (признак itemsmovable выставлен).
Вызывать аналогичный метод базового класса.


Название: Re: qpainter + qraphicsscene
Отправлено: boriska от Декабрь 13, 2012, 13:27
Покажи как переопределил.
Код:
class view : public QGraphicsView
{
    Q_OBJECT
public:
    view(QWidget *parent = 0);
private:
    float scale;
protected:
    void drawBackground(QPainter *p, const QRectF &rect);
    void mouseMoveEvent(QMouseEvent *event);
    void wheelEvent(QWheelEvent *event);
    void keyPressEvent(QKeyEvent *e);
signals:
   
public slots:
   
};

void view::drawBackground(QPainter *p, const QRectF &rect)
{

    QPainter painter(viewport());
 ... 
//рисую qpainter-ом

}
//-------------------------------------------------------------------------------------------------
/*
void view::mouseMoveEvent(QMouseEvent *event)
{
//просто снимаю координаты курсора
...
}
*/
void view::keyPressEvent(QKeyEvent *e)
{
   ...
}

void view::wheelEvent(QWheelEvent *event)
{
   ...
   
}

Код:
class scene : public QGraphicsScene
{
    //Q_OBJECT
public:
    explicit scene(QObject *parent = 0);
private:
protected:
signals:   
public slots:
};

scene::scene(QObject *parent) :
    QGraphicsScene(parent)
{
    setSceneRect(0,0,800,800);

     ...
    addItem(mf);
}





Название: Re: qpainter + qraphicsscene
Отправлено: boriska от Декабрь 13, 2012, 13:29

Вызывать аналогичный метод базового класса.
[/quote]
не понял


Название: Re: qpainter + qraphicsscene
Отправлено: GreatSnake от Декабрь 13, 2012, 13:39
В view::mouseMoveEvent() вызывай QGraphicsView::mouseMoveEvent().


Название: Re: qpainter + qraphicsscene
Отправлено: carrygun от Декабрь 13, 2012, 13:40

Вызывать аналогичный метод базового класса.
не понял
[/quote]

Скорее всего ты его перекрыл, и события дальше не уходят. Особо из кода не понятно, но попробуй в твоем mouseMoveEvent() в конце написать чтото в духе:
Код
C++ (Qt)
QGraphicsView::mouseMoveEvent(event_который_прилетает_в_твой_обработчик);