Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: svch от Октябрь 28, 2006, 17:51



Название: Qt 4.2 Добавление объектов в QGraphicsScene
Отправлено: 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 отображался в нужном месте и немедленно отрисовывался??? Помогите плиз!!!


Название: Qt 4.2 Добавление объектов в QGraphicsScene
Отправлено: Dendy от Октябрь 28, 2006, 19:25
event->pos() возвратит тебе точку в локальньІх координатах окна. Итем же, ессесна, добавляется на сцену в координатах сценьІ. Если к QGraphicsView применена матрица трансформаций, то ети координатьІ совпадать конечно же не будут. Для перевода координат предумотреньІ функции:

Код:
QGraphicsView::mapToScene();
QGraphicsView::mapFromScene();


Название: Qt 4.2 Добавление объектов в QGraphicsScene
Отправлено: svch от Октябрь 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)


Название: Qt 4.2 Добавление объектов в QGraphicsScene
Отправлено: Dendy от Октябрь 31, 2006, 09:44
Код:
QGraphicsView::updateSceneRect();


Название: Qt 4.2 Добавление объектов в QGraphicsScene
Отправлено: trailblazer от Март 11, 2007, 15:27
Выложи, пожалуйста, код конструктора,
не понимаю, как подключить QGraphicsScene к QGraphicsView в классе(

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

 вроде разобрался...