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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QGraphicsScene on QGraphicsItem  (Прочитано 10195 раз)
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« : Декабрь 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);
на екране белый фон.
Зарание спасибо
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Декабрь 17, 2007, 16:15 »

А экзамплы посмотреть?

QTDIR/examples/graphicsview/
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #2 : Декабрь 17, 2007, 17:16 »

А экзамплы посмотреть?

QTDIR/examples/graphicsview/

Наверное лень или проблемы с языком.
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #3 : Декабрь 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 обьекте или в его елементах ?
чтобы слот добавить или функцию
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #4 : Декабрь 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?
Да и вообще если есть ошибка, то надо бы сказать какая. Не так ли?

В очередной раз призываю читать документацию.
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #5 : Декабрь 18, 2007, 20:16 »

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

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

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


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