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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.2 Добавление объектов в QGraphicsScene  (Прочитано 5157 раз)
svch
Гость
« : Октябрь 28, 2006, 17:51 »

Необходимо чтобы по щелчку мыши добавлялся в сцену объет (напр. эллипс или квадрат). Я написал свой класс которой наследуется от QGraphicsView.
class GraphicsWidget : public QGraphicsView
{
public:
    GraphicsWidget();

protected:
    void wheelEvent(QWheelEvent *event);
    void mousePressEvent(QMouseEvent *event);
private:
    QGraphicsScene *scene;
};

Функция mousePressEvent определена например так:
void GraphicsWidget::mousePressEvent(QMouseEvent *event)
{
   scene->addEllipse(QRectF(event->pos(), QSizeF(20, 20)),     QPen(QColor(0, 199, 0)));
   ...
}

... Проблема заключается в том что item появляется не там где я щелкнул мышкой... Как сделать что-бы объект item отображался в нужном месте и немедленно отрисовывался??? Помогите плиз!!!
Записан
Dendy
Гость
« Ответ #1 : Октябрь 28, 2006, 19:25 »

event->pos() возвратит тебе точку в локальньІх координатах окна. Итем же, ессесна, добавляется на сцену в координатах сценьІ. Если к QGraphicsView применена матрица трансформаций, то ети координатьІ совпадать конечно же не будут. Для перевода координат предумотреньІ функции:

Код:
QGraphicsView::mapToScene();
QGraphicsView::mapFromScene();
Записан
svch
Гость
« Ответ #2 : Октябрь 29, 2006, 13:38 »

Спасибо помогло. Метод теперь имеет такой код:
void GraphicsWidget::mousePressEvent(QMouseEvent *event)
{
   QPointF point= this->mapToScene(event->pos());
   scene->addRect(QRectF(point, QSizeF(20, 20)), QPen(QColor(0, 199, 0)));
   QList<QRectF> list;
   list.push_back(QRectF(point, QSizeF(20, 20)));
   this->updateScene(list);
}

А как можно упростить обновление сцены?(что-бы напр. не использовать QList)
Записан
Dendy
Гость
« Ответ #3 : Октябрь 31, 2006, 09:44 »

Код:
QGraphicsView::updateSceneRect();
Записан
trailblazer
Гость
« Ответ #4 : Март 11, 2007, 15:27 »

Выложи, пожалуйста, код конструктора,
не понимаю, как подключить QGraphicsScene к QGraphicsView в классе(

добавлено спустя:

 вроде разобрался...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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