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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: GraphicsScene резетнуть  (Прочитано 8273 раз)
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« : Ноябрь 01, 2018, 14:08 »

QGraphicsScene::sceneRect растет при добавлении итемов, что логично. Но когда очищаем сцену (clear), она не думает уменьшать размер.
Возможно ли обнулить сцену, как будто её только-что создали?

Возможно, есть другие решение этой проблемы? itemsBoundingRect()?

Солгаситесь, странное поведение класса (объекта), если мы не можем вернуть его в первоночальное состояние.
« Последнее редактирование: Ноябрь 01, 2018, 14:24 от Azazello » Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #1 : Ноябрь 02, 2018, 07:46 »

Цитировать
If unset, or if set to a null QRectF, sceneRect() will return the largest bounding rect of all items on the scene since the scene was created (i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks).

Код:
setSceneRect( QRectF() );
Записан
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #2 : Ноябрь 02, 2018, 09:24 »

If unset, or if set to a null QRectF, sceneRect() will return the largest bounding rect of all items on the scene since the scene was created (i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks).

Код:
setSceneRect( QRectF() );

i.e., a rectangle that grows when items are added to or moved in the scene, but never shrinks.
setSceneRect( QRectF() ); не поможет. Пробовал.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Ноябрь 02, 2018, 11:38 »

Если сцену нужно ужать до текущих элементов, то без изврата никак.
Ну а если на сцене элементов не осталось - прибить сцену, создать новую.
Записан

Юра.
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #4 : Ноябрь 02, 2018, 12:38 »

Если сцену нужно ужать до текущих элементов, то без изврата никак.
Ну а если на сцене элементов не осталось - прибить сцену, создать новую.

Понятно. Спасибо.
Прибить сцену легко только когда начинаешь разработку и это придусмотрел в архитектуре, а сейчас прибивать сложновато и не хочется.

Пошел извратом
Код:

connect(this,&QGraphicsScene::changed,this,&BaScene::onChanged);

void BaScene::onChanged(const QList<QRectF> &)
{
    QRectF rect = itemsBoundingRect();
    setSceneRect(rect);
}
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Ноябрь 02, 2018, 13:58 »

Сейчас уже не найду свой код, но такой простой, как у тебя какую-то проблему вызывал "во время эксплуатации", поэтому у меня много более сильный изврат был.
Что-то было связано с масштабированием/навигацией.
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Ноябрь 02, 2018, 16:38 »

Пошел извратом
2D/3D "cцена" в принципе не ограничена в пр-ве. Напр юзер хочет поставить новый объект на расстоянии 1км от имеющихся - почему нет, это совершенно корректно. Поэтому обязательно должна быть бубочка "Fit" (вписать сцену в область просмотра), но навязывать эту операцию юзеру (делать ее автоматом как у Вас) не нужно, только по запросу
Записан
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #7 : Ноябрь 05, 2018, 19:57 »

Пошел извратом
2D/3D "cцена" в принципе не ограничена в пр-ве. Напр юзер хочет поставить новый объект на расстоянии 1км от имеющихся - почему нет, это совершенно корректно. Поэтому обязательно должна быть бубочка "Fit" (вписать сцену в область просмотра), но навязывать эту операцию юзеру (делать ее автоматом как у Вас) не нужно, только по запросу

Ну, это смотря какая задумка у UI. Вообще немного замучался с GraphicsView.

Давайте представим задачу - колебания суточной температуры.
view это все показывает, пользователь не взаимодейтвует с GraphicsView напрямую (только в данном примере).

Но вот вы захотели посмотреть не суточные колебания, а колебания за неделю этой самой температуры. Понятно, что предыдущая сцена идет лесом и все строится заново.

Конечно, вы можете сказать, что я переборщил с GraphicsView и рисуй ручками давай в painter. В данном случае это не проблема, но при добавлении интерактивности будут сложности.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Ноябрь 05, 2018, 20:04 »

а чем не устраивает вариант

setSceneRect( "какой-то дефолтный рект" );
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #9 : Ноябрь 05, 2018, 20:16 »

а чем не устраивает вариант

setSceneRect( "какой-то дефолтный рект" );

А какой дефолтный Rect. Данные то подкачиваются динамически. Сцена растет. Если я поставлю какой-то дефолтный (пусть максимальный), тогда мне прийдется каждый раз опредлять свой рект для view. Мне же нужно чтобы ползунок (scroll) показывал только существующие данные, чтобы я его передвигая мог расширять сцену. Да обычное поведению view  в модели
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Ноябрь 06, 2018, 19:06 »

А какой дефолтный Rect.

А какой тогда рект при первом создании сцены?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #11 : Ноябрь 06, 2018, 19:20 »

А какой дефолтный Rect.

А какой тогда рект при первом создании сцены?
нулевой
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #12 : Ноябрь 07, 2018, 18:17 »

Но нулевой то нельзя, зато можно 1х1, например.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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