Название: 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);Спасибо за это, работает.
|