crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Несколько наследников QGraphicsScene
RazrFalcon
  опции профиля:
сообщение 15.9.2011, 16:59
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Есть: 2-а QGraphicsView и 2-а наследника QGraphicsScene, GraphicsScene.
Наследник сделан для того, что бы предопределить drawBackground()

Создание:
  scene = new GraphicsScene();
  graphicsView->setScene(scene);

  scene2 = new GraphicsScene();
  graphicsView_2->setScene(scene2);

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

Что бы начало рисовать на второй сцене, а точнее вьюевере - нужно закоментировать:
  graphicsView->setScene(scene);

Судя по дебагу, графики рисуются и на обеих сценах, но не отображаются только на первом вьюевере.
Как решить эту багу? Может кто то сталкивался.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 15.9.2011, 19:08
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


В коде видно, что управляю я второй сценой, а рисуется первая :blink:

Пример:
Прикрепленные файлы
Прикрепленный файл  example.zip ( 5.15 килобайт ) Кол-во скачиваний: 103
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 16.9.2011, 17:10
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Help! Никак не пойму в чем бага <_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.9.2011, 8:42
Сообщение #4


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата
Судя по дебагу, графики рисуются и на обеих сценах


а указатели на сцену в эти моменты тоже разные ? Может, один и тот же указатель используется

если функция не статическая, смотри this

Сообщение отредактировал Алексей1153 - 17.9.2011, 8:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.9.2011, 9:15
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Где именно? В main'е или в классе?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 17.9.2011, 22:13
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата
Судя по дебагу, графики рисуются и на обеих сценах,


там, где они рисуются, рисование производится через указатель на сцену, так ведь ? Так вот - действительно ли там фигурируют разные указатели, либо один ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.9.2011, 20:49
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


ХЗ <_<

qDebug()<<scene1<<scene2;

GraphicsScene(0x96fbc90) GraphicsScene(0x9717cf0)

Вроде бы разные...

Кстати, заметил новый варнинг:
QGraphicsScene::removeItem: item 0x9dbddc8's scene (0x9dde018) is different from this scene (0x9dbd398)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.9.2011, 9:47
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


пытаешься удалить со сцены элемент принадлежащий другой сцене.
Копай-копай, Алексей правильно говорит, где-то ты с указателями напутал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 19.9.2011, 9:58
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

Спасибо сказали: 30 раз(а)




Репутация:   3  


Бага в том, что используется глобальный массив для GraphicsItem.
GraphicsItem может принадлежать только одной сцене.

Если сделать глобальные переменные членами класса, то все работает замечательно.


Прикрепленные файлы
Прикрепленный файл  example.zip ( 4.95 килобайт ) Кол-во скачиваний: 95
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 19.9.2011, 11:55
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Спасибо огромное! Вы меня спасли!
Блин, мне даже в голову это не приходило. О таких тонкостях я и не знал.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 17:20