Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: IGHOR от Декабрь 17, 2007, 15:07



Название: QGraphicsScene on QGraphicsItem
Отправлено: IGHOR от Декабрь 17, 2007, 15:07
Помогите разобратся в QGraphicsScene.
прочитал все статти в форуме и документацию, так и не смог добится результата.
Мне нужно добавить QGraphicsItem и обращатся к нему.
Пожалуйста киньте понятный пример.

пробовал это:
Код:
QGraphicsView *view;
view=new QGraphicsView(this);
view->setGeometry(10,10,200,500);
QGraphicsScene scene;
 scene.addText("Hello, world!");
 scene.addEllipse(10,10,100,100);
 view->setScene(&scene);
на екране белый фон.
Зарание спасибо


Название: Re: QGraphicsScene on QGraphicsItem
Отправлено: pastor от Декабрь 17, 2007, 16:15
А экзамплы посмотреть?

QTDIR/examples/graphicsview/


Название: Re: QGraphicsScene on QGraphicsItem
Отправлено: Mikhail от Декабрь 17, 2007, 17:16
А экзамплы посмотреть?

QTDIR/examples/graphicsview/

Наверное лень или проблемы с языком.


Название: Re: QGraphicsScene on QGraphicsItem
Отправлено: IGHOR от Декабрь 18, 2007, 16:06
Спасибо за совет с екземплами, но я это уже читал и было сложно разобратся..
не прывычная структура использования.
уже добавляю елементы и могу их перемещать.
У меня еще два вопроса:
1) почему таким образом не работает ?
Код:
QGraphicsScene *scene = new QGraphicsScene;
 QGraphicsTextItem* p = scene->addText(tr("Virnasdfasd"));
 p->setFlag(QGraphicsItem::ItemIsMovable);
 p->setFlag(QGraphicsItem::ItemIsSelectable);
 ui.graphicsView->setScene(scene);
 ui.setupUi(this);
Выскакивает ошибка после  ui.graphicsView->setScene(scene);
Таким способом все ок:
Код:
scene = new QGraphicsScene;
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
QPixmap pixmap(100,100);
QPainter painter(&pixmap);
painter.drawRect(10,10,80,80);
QGraphicsPixmapItem * p = scene->addPixmap(pixmap);
 QGraphicsTextItem* i = scene->addText(tr("Virnasdfasd"));

 p->setFlag(QGraphicsItem::ItemIsMovable);
 p->setFlag(QGraphicsItem::ItemIsSelectable);
 p->setPos(qrand()%int(scene->width()),qrand()%int(scene->height()));
  i->setFlag(QGraphicsItem::ItemIsMovable);
 i->setFlag(QGraphicsItem::ItemIsSelectable);
 i->setPos(qrand()%int(scene->width()),qrand()%int(scene->height()));
 p->setZValue(2);
  i->setZValue(1);

     QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20);

     timer = new QTimeLine(5000);
     timer->setFrameRange(0, 100);

     QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
     animation->setItem(ball);
     animation->setTimeLine(timer);
ball->setFlag(QGraphicsItem::ItemIsMovable);
ball->setFlag(QGraphicsItem::ItemIsSelectable);
     for (int i = 0; i < 200; ++i)
     animation->setPosAt(i / 200.0, QPointF(i, i));
     ball->setZValue(3);
     scene->setSceneRect(0, 0, 250, 250);
     scene->addItem(ball);
timer->start();
QGraphicsView *view = new QGraphicsView(this);
view->setGeometry(0,0,1280,800);
view->setBaseSize(1280,800);
view->setScene(scene);
как правильно использовать  ui. ?
2) Как использовать mousePressEvent в graphicsView обьекте или в его елементах ?
чтобы слот добавить или функцию


Название: Re: QGraphicsScene on QGraphicsItem
Отправлено: Mikhail от Декабрь 18, 2007, 17:47
Спасибо за совет с екземплами, но я это уже читал и было сложно разобратся..
не прывычная структура использования.
уже добавляю елементы и могу их перемещать.
У меня еще два вопроса:
1) почему таким образом не работает ?
Код:
QGraphicsScene *scene = new QGraphicsScene;
 QGraphicsTextItem* p = scene->addText(tr("Virnasdfasd"));
 p->setFlag(QGraphicsItem::ItemIsMovable);
 p->setFlag(QGraphicsItem::ItemIsSelectable);
 ui.graphicsView->setScene(scene);
 ui.setupUi(this);
Выскакивает ошибка после  ui.graphicsView->setScene(scene);
Таким способом все ок:
Код:
scene = new QGraphicsScene;
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
QPixmap pixmap(100,100);
QPainter painter(&pixmap);
painter.drawRect(10,10,80,80);
QGraphicsPixmapItem * p = scene->addPixmap(pixmap);
 QGraphicsTextItem* i = scene->addText(tr("Virnasdfasd"));

 p->setFlag(QGraphicsItem::ItemIsMovable);
 p->setFlag(QGraphicsItem::ItemIsSelectable);
 p->setPos(qrand()%int(scene->width()),qrand()%int(scene->height()));
  i->setFlag(QGraphicsItem::ItemIsMovable);
 i->setFlag(QGraphicsItem::ItemIsSelectable);
 i->setPos(qrand()%int(scene->width()),qrand()%int(scene->height()));
 p->setZValue(2);
  i->setZValue(1);

     QGraphicsItem *ball = new QGraphicsEllipseItem(0, 0, 20, 20);

     timer = new QTimeLine(5000);
     timer->setFrameRange(0, 100);

     QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
     animation->setItem(ball);
     animation->setTimeLine(timer);
ball->setFlag(QGraphicsItem::ItemIsMovable);
ball->setFlag(QGraphicsItem::ItemIsSelectable);
     for (int i = 0; i < 200; ++i)
     animation->setPosAt(i / 200.0, QPointF(i, i));
     ball->setZValue(3);
     scene->setSceneRect(0, 0, 250, 250);
     scene->addItem(ball);
timer->start();
QGraphicsView *view = new QGraphicsView(this);
view->setGeometry(0,0,1280,800);
view->setBaseSize(1280,800);
view->setScene(scene);
как правильно использовать  ui. ?
2) Как использовать mousePressEvent в graphicsView обьекте или в его елементах ?
чтобы слот добавить или функцию

Ну для начала что такое ui?
Ты то знаешь, а мы и компилятор должы догадываться, да?
Сначала желательно выполнить ui.setupUi(this);, а потом уже ui.graphicsView->setScene(scene);
Что такое graphicsView?
Да и вообще если есть ошибка, то надо бы сказать какая. Не так ли?

В очередной раз призываю читать документацию.


Название: Re: QGraphicsScene on QGraphicsItem
Отправлено: IGHOR от Декабрь 18, 2007, 20:16
Ну для начала что такое ui?
Ты то знаешь, а мы и компилятор должы догадываться, да?
Сначала желательно выполнить ui.setupUi(this);, а потом уже ui.graphicsView->setScene(scene);
Что такое graphicsView?
Да и вообще если есть ошибка, то надо бы сказать какая. Не так ли?

В очередной раз призываю читать документацию.

Вы уже догадались что такое ui по умолчанию ресурс окна.
Сначала желательно выполнить ui.setupUi(this);, а потом уже ui.graphicsView->setScene(scene);
Спасибо за это, работает.