Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: SeverusSnape от Апрель 02, 2011, 11:59



Название: Расположение элементов в QGraphicsScene
Отправлено: SeverusSnape от Апрель 02, 2011, 11:59
Добрый день! Впервые начал использовать QgraphicsView(Scene) и столкнулся с небольшой проблемой: создаю QGraphicsPixmapItem в Scene, но не могу указать ему расположение, например в левом верхем углу с отступом от верхнего и левого края в 20 пикселей. SetPos для итема не помогает, он, итем, все равно рисуется по центру.

Для View пытался пробовать устанавливать setAligment с флагами, но он рисует, действительно в верхнем левом углу, но впритык. А мне ко всему процему за этим итемом (справа от него) нужно расположить еще несколько.

Так вот, скажите, пожалуйста - как можно устанавливать произвольные координаты для итемов в Scene?

Заранее благодарен!


Название: Re: Расположение элементов в QGraphicsScene
Отправлено: madRoger от Апрель 02, 2011, 12:14
Попробуйте воспользоваться методом QGraphicsView::setSceneRect для принудительного указания области сцены.

При добавлении QGraphicsItem в QGraphicsScene происходит автоматическое центрирование на этом Итеме. Вероятно, в этом проблема.


Название: Re: Расположение элементов в QGraphicsScene
Отправлено: SeverusSnape от Апрель 02, 2011, 12:34
Пробовал, но что-то не получается:

QGraphicsView* topView = new QGraphicsView(this);
topView->setBackgroundBrush(QBrush(QColor(229, 221, 200)));
topView->setScene(new QGraphicsScene(this));
 // topView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
 // topView->setContentsMargins(20,20,20,20);
topView->setSceneRect(0,0,topView->width(),topView->height());

Мне нужно получить следующее: (см. вложение)

Спасибо!



Название: Re: Расположение элементов в QGraphicsScene
Отправлено: GreatSnake от Апрель 02, 2011, 12:40
Цитировать
topView->setSceneRect(0,0,topView->width(),topView->height());
А теперь подумай и сделай вывод о размере topView при этом вызове.


Название: Re: Расположение элементов в QGraphicsScene
Отправлено: madRoger от Апрель 02, 2011, 12:55
только что попробовал программно. Все ОК.

QGraphicsPixmapItem *px = new QGraphicsPixmapItem(QPixmap("C:/pix.png"));
QGraphicsTextItem   *tx1 = new QGraphicsTextItem("qtGraphic Test TextItem N1");
QGraphicsTextItem   *tx2 = new QGraphicsTextItem("qtGraphic Test TextItem N2");

px->setPos(20.0,20.0);
gs->addItem(px);
tx1->setPos(105.0,20.0);
gs->addItem(tx1);
tx2->setPos(105.0,40.0);
gs->addItem(tx2);

ui->gv->setScene( gs );

ui->gv->setSceneRect(0.0,0.0,400.0,400.0);

 где gv - QGraphicsView, gs - QGraphicsScene.

400Х400 размер gv. Координаты взял примерно, мой пиксмап размером 64Х64.
Вам в вашем случае нужно подставить свои цифры.

UPD: Какой размер у topView до запуска программы ?


Название: Re: Расположение элементов в QGraphicsScene
Отправлено: SeverusSnape от Апрель 02, 2011, 15:41
Спасибо всем. Помогли! Разобрался - проблема была в размерах сцены.