Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Zeka13 от Апрель 15, 2012, 00:10



Название: Система координат в QGraphicsScene[РЕШЕНО]
Отправлено: Zeka13 от Апрель 15, 2012, 00:10
Читал, читал, теорию понял, в практику так и не нашёл
Хочу в левом верхнем углу сцены нарисовать картинку квадратную, помогите пожалуйста...

  
Код
C++ (Qt)
QGraphicsScene *scene = new QGraphicsScene;
   QGraphicsPixmapItem* pPixmapItem =
       scene->addPixmap(QPixmap(":/images/plus.png"));
   pPixmapItem->setFlags(QGraphicsItem::ItemIsMovable);
  // что использовать за место 0,0(цент сцены вроде это получается) pPixmapItem->setPos(0,0);
  // или я совсем далеко от истины?
 
   ui->graphicsView->setScene(scene);
   ui->graphicsView->show();

заранее спасибо


Название: Re: Система координат в QGraphicsScene
Отправлено: iroln от Апрель 15, 2012, 12:36
А размер сцены то изначально какой и где начало координат сцены? Если размер 0x0, то сцена будет расширяться динамически при таскании объектов по сцене. Если размер и начало координат заданы, например, setSceneRect(0, 0, 500, 500), то, чтобы вашу картинку поставить в левый верхний угол, надо задать позицию айтема в 0,0.


Название: Re: Система координат в QGraphicsScene
Отправлено: Zeka13 от Апрель 15, 2012, 13:38
спасибо за ответ, но что-то не совсем получается всё равно

в форме дизайнера выставил для окна с Graphics view(скомпонован по сетке) выставил размеры 500x500

сейчас код выглядит так

Код
C++ (Qt)
QGraphicsScene *scene = new QGraphicsScene;
   scene->setSceneRect(0, 0, 500, 500);
 
   QGraphicsPixmapItem* pPixmapItem =
       scene->addPixmap(QPixmap(":/images/plus.png"));
   pPixmapItem->setPos(500,500);
 
   QGraphicsPixmapItem* pPixmapItem2 =
       scene->addPixmap(QPixmap(":/images/minus.png"));
   pPixmapItem2->setPos(0,0);
 
   ui->graphicsView->setScene(scene);
   ui->graphicsView->show();

элемент в 500,500 совсем уезжает, а в 0,0 тоже немного съезжает, вот скрин
(http://storage4.static.itmages.ru/i/12/0415/s_1334486290_6340082_10b083fa68.png) (http://itmages.ru/image/view/487051/10b083fa)
 


Название: Re: Система координат в QGraphicsScene
Отправлено: iroln от Апрель 15, 2012, 14:18
Вот минимальный пример на Python:

Код
Python
import sys
 
from PySide.QtCore import Qt
 
from PySide.QtGui import (
   QApplication,
   QPen,
   QPixmap,
   QGraphicsView,
   QGraphicsScene,
   QGraphicsPixmapItem,
   QGraphicsRectItem,
)
 
if __name__ == '__main__':
 
   app = QApplication(sys.argv)
 
   view = QGraphicsView()
   scene = QGraphicsScene()
 
   pix_item_1 = QGraphicsPixmapItem()
   pix_item_1.setPixmap(QPixmap('image.png'))
 
   pix_item_2 = QGraphicsPixmapItem()
   pix_item_2.setPixmap(QPixmap('image.png'))    
 
   rect_item = QGraphicsRectItem()
 
   scene.setSceneRect(0.0, 0.0, 500.0, 500.0)
 
   scene.addItem(pix_item_1)
   scene.addItem(pix_item_2)
   scene.addItem(rect_item)
 
   pix_item_1.setPos(0, 0)
   pix_item_2.setPos(500, 500)
 
   rect_item.setRect(0, 0, 500, 500)
   rect_item.setPen(QPen(Qt.red, 2, Qt.SolidLine))
 
   view.setScene(scene)
   view.show()
 
   sys.exit(app.exec_())    
 

Результат работы в приложенной картинке.
Красная рамка - это границы сцены, две нарисованные кнопки - это два пиксмэп-айтема, одни с позицией 0,0, второй с позицией 500,500. Вся белая область, по сути всё окно - это QGraphicsView.

Ну, думаю, теперь будет понятнее, как оно работает.


Название: Re: Система координат в QGraphicsScene
Отправлено: Zeka13 от Апрель 15, 2012, 14:22
я не могу из вашего примера понять, как мне изменить свой пример

python я не знаю


Название: Re: Система координат в QGraphicsScene
Отправлено: iroln от Апрель 15, 2012, 14:28
Python знать не обязательно, API в PyQt такое же как в С++.

У вас скорее всего просто непонимание, как работает механизм графического представления. Со сценой у вас всё в порядке, элементы находятся там где нужно, но графический вид может отображать часть сцены и вообще смотреть в любую её точку, поэтому ваша айтем-картинка не находится в левом верхнем углу окна, но она по прежнему находится в верхнем левом углу сцены. То есть вид может изменять размеры, но сцена при этом не меняет своё положение, она зафиксирована в том положении, которые вы ей задали.


Название: Re: Система координат в QGraphicsScene
Отправлено: Zeka13 от Апрель 15, 2012, 14:32
я сделал минимальный проект, вам не трудно внести в него изменения, а то так не очень понятно?




Название: Re: Система координат в QGraphicsScene
Отправлено: iroln от Апрель 15, 2012, 14:43
Понятно, кажется, что у вас за проблема. Картинки же здоровенные. Вокруг вашего "минуса" огромная белая "рамка". Обрезать картинку не пробовали? :)


Название: Re: Система координат в QGraphicsScene
Отправлено: Zeka13 от Апрель 15, 2012, 14:46
спасибо, сейчас попробую


Название: Re: Система координат в QGraphicsScene
Отправлено: iroln от Апрель 15, 2012, 14:50
Вот, поправил. Посмотрите.


Название: Re: Система координат в QGraphicsScene
Отправлено: Zeka13 от Апрель 15, 2012, 15:04
спасибо огромное, но остаётся один вопрос

как сделать область(красный квадрат) на весь GraphicsView ?

Тобишь я разворачиваю окно на весь экран, а минус и плюс раскидываются в левый верхний и правый нижний иглы развёрнутого окна?


Название: Re: Система координат в QGraphicsScene
Отправлено: iroln от Апрель 15, 2012, 15:55
Цитировать
Тобишь я разворачиваю окно на весь экран, а минус и плюс раскидываются в левый верхний и правый нижний иглы развёрнутого окна?
Ну по всей видимости при ресайзе окна пересчитывать размер сцены и позицию ваших картинок.

Как-то так, примерно. Посмотрите. Но можно придумать и другое решение.


Название: Re: Система координат в QGraphicsScene
Отправлено: Zeka13 от Апрель 15, 2012, 16:05
спасибо огромное ещё раз за потраченное на меня время, даже код за меня написали, сейчас буду разбираться!

Ваша реализация для меня полностью подходит!


Название: Re: Система координат в QGraphicsScene[РЕШЕНО]
Отправлено: iroln от Апрель 15, 2012, 16:13
Да не за что. Просто вам, может быть было бы проще вообще без GraphicsScene обойтись, или в дальнейшем предполагается, что туда могут добавляться новые объекты с какими-то специфическими свойствами, поведением и т.д., а также интерактивное управление ими?


Название: Re: Система координат в QGraphicsScene[РЕШЕНО]
Отправлено: Zeka13 от Апрель 15, 2012, 18:02
не так сложно, но элементов будет много и они будут менять своё местоположение, так что QGraphicsScene для моей задачи оптимальное решение