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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Расположение элементов в QGraphicsScene  (Прочитано 5795 раз)
SeverusSnape
Гость
« : Апрель 02, 2011, 11:59 »

Добрый день! Впервые начал использовать QgraphicsView(Scene) и столкнулся с небольшой проблемой: создаю QGraphicsPixmapItem в Scene, но не могу указать ему расположение, например в левом верхем углу с отступом от верхнего и левого края в 20 пикселей. SetPos для итема не помогает, он, итем, все равно рисуется по центру.

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

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

Заранее благодарен!
Записан
madRoger
Гость
« Ответ #1 : Апрель 02, 2011, 12:14 »

Попробуйте воспользоваться методом QGraphicsView::setSceneRect для принудительного указания области сцены.

При добавлении QGraphicsItem в QGraphicsScene происходит автоматическое центрирование на этом Итеме. Вероятно, в этом проблема.
Записан
SeverusSnape
Гость
« Ответ #2 : Апрель 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());

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

Спасибо!

Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 02, 2011, 12:40 »

Цитировать
topView->setSceneRect(0,0,topView->width(),topView->height());
А теперь подумай и сделай вывод о размере topView при этом вызове.
Записан

Qt 5.11/4.8.7 (X11/Win)
madRoger
Гость
« Ответ #4 : Апрель 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 до запуска программы ?
« Последнее редактирование: Апрель 02, 2011, 12:59 от madRoger » Записан
SeverusSnape
Гость
« Ответ #5 : Апрель 02, 2011, 15:41 »

Спасибо всем. Помогли! Разобрался - проблема была в размерах сцены.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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