Название: paintEvent для QGraphicsView Отправлено: 0...-5 от Февраль 03, 2011, 23:24 Ребят, вопрос такой: можно ли переопределить обработчик события рисования для QGraphicsView, чтобы иметь возможность помимо отрисовки сцены рисовать что-то в координатах виджета? Т.е. сделать нечто вроде
Код: void MyGraphicsView::paintEvent(QPaintEvent* event) Название: Re: paintEvent для QGraphicsView Отправлено: _govorilka от Февраль 04, 2011, 07:29 Да, можно. paintEvent() для всех наследников QWidget работает одинаково. Только не забывай вызывать функцию самого QGraphicsView в начале своей.
Для "просто рисования", лучше использовать QGraphicsScene::drawForeground(), QGraphicsScene::drawBackground() или QGraphicsItem c установленым флагом QGraphicsItem::ItemIgnoresTransformations. В прошлом проекте, для подобной задачи добавлял QWidget сверху: Код: QGraphicsView* view = new QGraphicsView(); Тогда ты получаешь еще и отдельную обработку мышки. Минус в том, что все что назодится под таким QWidget'ом сообщения мыши уже не обрабатывает, здесь надо прокидывать их до папы самому. Название: Re: paintEvent для QGraphicsView Отправлено: 0...-5 от Февраль 04, 2011, 07:42 Ну насчет drawBackcgound и drawForeground, то в документации по ним сказано:
Цитировать All painting is done in scene coordinates. Мне же надо иметь возможность рисования в координатах виджета.А вот использовать QWidget сверху - это интересно))А что будет если я передам компоновщику QGrapicsView? И не перекроет ли верхний виджет его целиком(точнее его фон)? Название: Re: paintEvent для QGraphicsView Отправлено: _govorilka от Февраль 04, 2011, 07:51 Виджет у которого есть папа, по умолчанию фон прозрачный. Фон QGraphicsView точно не перекроет.
Для пересчета координат в функцию drawForeground() стоит поковырять в сторону QPainter::setTransform(), но как правильно составить матрицу я не знаю. Название: Re: paintEvent для QGraphicsView Отправлено: _govorilka от Февраль 04, 2011, 07:55 Флаг QGraphicsItem::ItemIgnoresTransformations заставляет QGraphiscItem игнорировать преобразования координат, фактически заставляет жить его в координатах QGraphicsView к которому относится сцена.
Название: Re: paintEvent для QGraphicsView Отправлено: 0...-5 от Февраль 04, 2011, 08:10 Это все замечательно, но я не элементы сцены собираюсь отрисовывать! Допустим надо поверх виджета нанести сетку с подписями, тогда удобнее пользоваться именно отрисовкой по виджету в его же координатах...
Название: Re: paintEvent для QGraphicsView Отправлено: _govorilka от Февраль 04, 2011, 08:21 Какой путь выбрать... Это дело вкуса, каждый имеет свои преимущества и недостатки.
|