Russian Qt Forum
Ноябрь 01, 2024, 16:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qpainter + qraphicsscene  (Прочитано 3573 раз)
boriska
Гость
« : Декабрь 13, 2012, 11:27 »

привет, подскажите как одновременно вывести два слоя:
первый рисуется qpainter-ом, вторая -QgraphicsScene, содержащая custom items?
Записан
boriska
Гость
« Ответ #1 : Декабрь 13, 2012, 12:46 »

привет, подскажите как одновременно вывести два слоя:
первый рисуется qpainter-ом, вторая -QgraphicsScene, содержащая custom items?
т.е. я сделал так:
в qraphicsview я переопределяю drawbackground(), где рисую qpainter-ом. по команде viewport().update() - перерисовываю.
в qgraphicsscene содержит произвольные item-ы, которые должны реагировать на действия мышки (перенос и т.д).

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

как решить этот момент?
Записан
carrygun
Гость
« Ответ #2 : Декабрь 13, 2012, 13:08 »

Покажи как переопределил.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Декабрь 13, 2012, 13:22 »

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

Qt 5.11/4.8.7 (X11/Win)
boriska
Гость
« Ответ #4 : Декабрь 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);
}



Записан
boriska
Гость
« Ответ #5 : Декабрь 13, 2012, 13:29 »


Вызывать аналогичный метод базового класса.
[/quote]
не понял
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Декабрь 13, 2012, 13:39 »

В view::mouseMoveEvent() вызывай QGraphicsView::mouseMoveEvent().
Записан

Qt 5.11/4.8.7 (X11/Win)
carrygun
Гость
« Ответ #7 : Декабрь 13, 2012, 13:40 »


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

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


Страница сгенерирована за 0.115 секунд. Запросов: 22.