Russian Qt Forum

Qt => Вопросы новичков => Тема начата: NickSin от Апрель 04, 2014, 11:32



Название: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 11:32
В общем ситуация такая, есть сцена помещенная в QGraphicView.
Нужно отлавливать изменение горизонтального скроллбара и соответственно перерисовывать.

В доках что-то мало нашел по этому поводу...
Помогите или подскажите в каком направлении "крутить"?


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: GreatSnake от Апрель 04, 2014, 12:11
Graphics View Framework (http://www.doc.crossplatform.ru/qt/4.7.x/html-qt/graphicsview.html)


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 13:27
Graphics View Framework (http://www.doc.crossplatform.ru/qt/4.7.x/html-qt/graphicsview.html)
Убивайте, но про скроллы ничего не нашел!


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: GreatSnake от Апрель 04, 2014, 13:33
Убивайте, но про скроллы ничего не нашел!
Правильно, т.к. если ты понял прочитанное, то сколлы тебя не должны беспокоить.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 13:37
Убивайте, но про скроллы ничего не нашел!
Правильно, т.к. если ты понял прочитанное, то сколлы тебя не должны беспокоить.
Можно подробней, потому мне не понятно...


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 13:40
Можно подробней, потому мне не понятно...
Вьюшка сама все перерисует, вам не надо ни о чем бесспокоиться. :)


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 13:52
Можно подробней, потому мне не понятно...
Вьюшка сама все перерисует, вам не надо ни о чем бесспокоиться. :)
Проблема не в отрисовке....
В моем проекте отрисовывается большое количество обьектов по логу, поэтому я хочу сделать "скользящее окно" чтобы по мере прокрутки скрола,  подгружался лог и отрисовывавались новые обьекты.
Я уже отрисовывал до этого большое количество объектов и скажу сразу, что ПК будет "висеть" при прокрутке скрола от верха до половины полосы прокрутки.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Igors от Апрель 04, 2014, 14:07
Крылья-крылья... Ноги! Напр юзер имел объекты (*) и вот хочет создать объект (Х) на значительном удалении. Какое должно быть поведение скроллеров  ???

*  *
  *  *


                X


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 14:15
Крылья-крылья... Ноги! Напр юзер имел объекты (*) и вот хочет создать объект (Х) на значительном удалении. Какое должно быть поведение скроллеров  ???

*  *
  *  *


                X

Распишу как я вижу!
(*) - обьекты
 

___________
|      *        |
|      *        |
|      *        |- окно
|      *        |
|__________|

скажем там , путь у нас рисуется всего 4 обьекта всегда! Когда я двигаю скрол вниз, он перерисовывает эти 4 обьекта на те, которые идут по логу ну или по позиции вниз!

Так должно быть понятней.



Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: GreatSnake от Апрель 04, 2014, 14:21
Дело в том, что вью всего лишь "отображатель" содержимого сцены и полностью от неё зависит.
То, что хочется тебе сделать, такую зависимость ломает и средствами QGraphicScene/QGraphicView просто такую задачу решить не получится.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 14:29
Дело в том, что вью всего лишь "отображатель" содержимого сцены и полностью от неё зависит.
То, что хочется тебе сделать, такую зависимость ломает и средствами QGraphicScene/QGraphicView просто такую задачу решить не получится.
Ок, а я могу скажем делать так, допустим я имею окно вью. Могу ли я ,определив координаты обьекта на сцене, сопоставить как-то их с текущим окном вью и соответственно вывести этот предмет или нет?
Такие манипуляции допустимы?


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: OKTA от Апрель 04, 2014, 15:19
Не особо разбираюсь в графике, но есть же QScrollBar * QAbstractScrollArea::verticalScrollBar () const у QGraphicView. Соответственно зная высоту отображаемой области и зная текущее положение скроллбара, можно принять решение подгружать или не подгружать новые объекты.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 15:33
скажем там , путь у нас рисуется всего 4 обьекта всегда! Когда я двигаю скрол вниз, он перерисовывает эти 4 обьекта на те, которые идут по логу ну или по позиции вниз!
Тогда я не вижу смысла в использовании QGraphicsXXX.
Такое лучше и проще рисовать с помощью делегата для QListView.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 15:37
Не особо разбираюсь в графике, но есть же QScrollBar * QAbstractScrollArea::verticalScrollBar () const у QGraphicView. Соответственно зная высоту отображаемой области и зная текущее положение скроллбара, можно принять решение подгружать или не подгружать новые объекты.
А я вот в доках этого не увидел...
Где можно подробней об этом посмотреть или в какой версии Qt оно есть?
 
скажем там , путь у нас рисуется всего 4 обьекта всегда! Когда я двигаю скрол вниз, он перерисовывает эти 4 обьекта на те, которые идут по логу ну или по позиции вниз!
Тогда я не вижу смысла в использовании QGraphicsXXX.
Такое лучше и проще рисовать с помощью делегата для QListView.
Ну я в качестве примера привел 4, а так у меня их  10-13 в окне. Но я не понял как я смогу отрисовать это все в QListView.  Извините , просто с делегатами вообще не знаком и мало представляю себе, что это.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Bepec от Апрель 04, 2014, 15:39
У него сверхсложные итемы наверно :) Но и сам listView не рассчитан на более миллиона записей )


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 15:44
Ну я в качестве примера привел 4, а так у меня их  10-13 в окне.
Ну и замечательно, хоть 25-30. :)

Но я не понял как я смогу отрисовать это все в QListView.  Извините , просто с делегатами вообще не знаком и мало представляю себе, что это.
Самое время познакомиться. Делегат позволяет отрисовывать каждый элемент, т.е. вы получаете данные из модели и можете рисовать в указанной области элемента что захотите.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 15:45
У него сверхсложные итемы наверно :) Но и сам listView не рассчитан на более миллиона записей )
По сути все итемы это полигоны с текстом)  Вот я просто не сталкивался с делегированием ListView ,  поэтому как-то даже страшно, о том, что мне написали))

Ну я в качестве примера привел 4, а так у меня их  10-13 в окне.
Ну и замечательно, хоть 25-30. :)

Но я не понял как я смогу отрисовать это все в QListView.  Извините , просто с делегатами вообще не знаком и мало представляю себе, что это.
Самое время познакомиться. Делегат позволяет отрисовывать каждый элемент, т.е. вы получаете данные из модели и можете рисовать в указанной области элемента что захотите.
А их хватит отрисовать сотни тысяч итемов или пару миллионов итемов ?


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 15:49
А их хватит отрисовать сотни тысяч итемов или пару миллионов итемов ?
Вы с моделями работали?
Отрисовывается только то, что видно в данный момент. А для того, что бы вы могли задать как рисовать каждый элемент служит делегат.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Igors от Апрель 04, 2014, 15:57
А их хватит отрисовать сотни тысяч итемов или пару миллионов итемов ?
Если айтемов так много + они простые, то есть прямой смысл отрисовывать в paintEvent. Все эти делегаты а тем более QGraphicsItem довольно расходны по памяти (расплата за стервис).

Определить какие пр-ки видимы - простое дерево, если надо расскажу. Если мульены только в видимой части - ограничить вывод, не лупить по экрану если там уже живого места нет.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 16:00
А их хватит отрисовать сотни тысяч итемов или пару миллионов итемов ?
Вы с моделями работали?
Отрисовывается только то, что видно в данный момент. А для того, что бы вы могли задать как рисовать каждый элемент служит делегат.
C моделями вообще или то, что я пытаюсь нарисовать?
Тоесть он как и вью будет сразу отрисовывать мне весь список данных?

А их хватит отрисовать сотни тысяч итемов или пару миллионов итемов ?
Если айтемов так много + они простые, то есть прямой смысл отрисовывать в paintEvent. Все эти делегаты а тем более QGraphicsItem довольно расходны по памяти (расплата за стервис).

Определить какие пр-ки видимы - простое дерево, если надо расскажу. Если мульены только в видимой части - ограничить вывод, не лупить по экрану если там уже живого места нет.
Продолжать рисовать в сцене как и до этого, только с отрисовкой по событию ?

Ну да про деревья хотел бы узнать, если можно) А так что-то вроде окна хотел сделать - выводить только то, что сейчас мы видим .


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 16:02
Все эти делегаты а тем более QGraphicsItem довольно расходны по памяти (расплата за стервис).
Не придумывайте, делегат это плюс один небольшой объект. Никаких расходов там нет и в помине.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 16:05
Тоесть он как и вью будет сразу отрисовывать мне весь список данных?
Вью никогда не отрисовывает сразу весь список, только то что видно в данный момент.
Делегат можно назвать внешним обработчиком paintEvent. Т.е. видно сейчас 20 элементов на экране, значит при обновлении будет вызван метод рисования делегата для этих элементов.
 


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 16:09
Тоесть он как и вью будет сразу отрисовывать мне весь список данных?
Вью никогда не отрисовывает сразу весь список, только то что видно в данный момент.
Делегат можно назвать внешним обработчиком paintEvent. Т.е. видно сейчас 20 элементов на экране, значит при обновлении будет вызван метод рисования делегата для этих элементов.
 
Странно, тогда почему когда я ему подаю сцену с 100000 тысячью обьектов, он очень долго думает, а когда подумает, отрисует видимые обьекты, а потом при скролле будет тормозить. Он же отрисовывает сцену при скролле по кадрово вроде?


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 16:13
Странно, тогда почему когда я ему подаю сцену с 100000 тысячью обьектов, он очень долго думает, а когда подумает, отрисует видимые обьекты, а потом при скролле будет тормозить. Он же отрисовывает сцену при скролле по кадрово вроде?
Я про QAbstractItemView и его наследников. :)


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 16:20
Странно, тогда почему когда я ему подаю сцену с 100000 тысячью обьектов, он очень долго думает, а когда подумает, отрисует видимые обьекты, а потом при скролле будет тормозить. Он же отрисовывает сцену при скролле по кадрово вроде?
Я про QAbstractItemView и его наследников. :)

О нем я не слышал,  но вижу, что наследуется от того же класса, что и QGraphicView. Правда я сейчас его посмотрел, даже не представляю как его использовать... Хотелось бы как то стандартными средствами, ибо новую модель с этого класса мне описать с моим экспириенсом пока не под силу (


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 16:25
О нем я не слышал,  но вижу, что наследуется от того же класса, что и QGraphicView. Правда я сейчас его посмотрел, даже не представляю как его использовать... Хотелось бы как то стандартными средствами, ибо новую модель с этого класса мне описать с моим экспириенсом пока не под силу (
Я вам предлагаю посмотреть на его наследника - QListView и разобраться с технологией model-view. Вы удивитесь, как у вас все упроститься. :)


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 16:35
О нем я не слышал,  но вижу, что наследуется от того же класса, что и QGraphicView. Правда я сейчас его посмотрел, даже не представляю как его использовать... Хотелось бы как то стандартными средствами, ибо новую модель с этого класса мне описать с моим экспириенсом пока не под силу (
Я вам предлагаю посмотреть на его наследника - QListView и разобраться с технологией model-view. Вы удивитесь, как у вас все упроститься. :)
Технология? Это вы имеете ввиду делегатов? Есть ли по ней ссылка?


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 04, 2014, 16:39
Технология? Это вы имеете ввиду делегатов? Есть ли по ней ссылка?
http://doc.crossplatform.ru/qt/4.3.2/model-view-programming.html


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 04, 2014, 16:41
Технология? Это вы имеете ввиду делегатов? Есть ли по ней ссылка?
http://doc.crossplatform.ru/qt/4.3.2/model-view-programming.html
Спасибо, попробую за выходные разобраться


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 07, 2014, 16:07
О нем я не слышал,  но вижу, что наследуется от того же класса, что и QGraphicView. Правда я сейчас его посмотрел, даже не представляю как его использовать... Хотелось бы как то стандартными средствами, ибо новую модель с этого класса мне описать с моим экспириенсом пока не под силу (
Я вам предлагаю посмотреть на его наследника - QListView и разобраться с технологией model-view. Вы удивитесь, как у вас все упроститься. :)

А модель делегата лучше от кого наследовать? QAbstractItemDelegate или QItemDelegate


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 07, 2014, 16:14
QItemDelegate, а лучше сразу QStyledItemDelegate.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 09, 2014, 10:05
QItemDelegate, а лучше сразу QStyledItemDelegate.
Я так в понимаю во втором случае можно более детально поработать со стилем?

И еще вопрос ,после формирования QListView  в чем его лучше отображать?  Чтобы он не грузил всю "сцену" как QGraphicView?


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: Old от Апрель 09, 2014, 10:12
И еще вопрос ,после формирования QListView  в чем его лучше отображать?  Чтобы он не грузил всю "сцену" как QGraphicView?
QListView и есть отображатель данных, которые предоставляет ему модель QAbstractItemModel и его наследники.


Название: Re: Помощь С QGraphicView и QGraphicScene
Отправлено: NickSin от Апрель 09, 2014, 11:26
И еще вопрос ,после формирования QListView  в чем его лучше отображать?  Чтобы он не грузил всю "сцену" как QGraphicView?
QListView и есть отображатель данных, которые предоставляет ему модель QAbstractItemModel и его наследники.

А хорошо, я вас понял, буду пытаться дальше