Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Hrundel от Июль 20, 2015, 15:37



Название: Пипетка для QGraphicsVeiw
Отправлено: Hrundel от Июль 20, 2015, 15:37
Всем привет!

Есть необходимость сделать пипетку для QGraphicsVeiw. Приходит в голову мысль рендерить QGraphicsVeiw в память и потом шарить пипеткой по памяти.
Есть более простые нативные варианты или это единственный путь к цели?

Всем спасибо.


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Bepec от Июль 20, 2015, 16:03
Тоже видится рендер - только не шарить там, а рендерить сразу нужный пиксель.

PS можно и grabWidget, но у рендера преимущество в виде передаваемой области :)


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Igors от Июль 20, 2015, 16:26
В смысле сграбить пыксель? Ну рендерить на каждое движение мыши - просто недостойно человека с университетским образованием :) Надо через QBackingStore, там выскочить на QPaintDevice который привести к QImage. Уже давненько так лазил садами-огородами (помню только Верес голосил  :)) но получалось, точно. Др словами до буфера окна достучаться можно.


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Hrundel от Июль 20, 2015, 21:16
Ладно, извращусь - посчитаю, что оптимальнее.   ;)

Спасибо всем.


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Hrundel от Июль 21, 2015, 22:33
Ох, Игорь, глыбоко ты все-таки Кутешные классы знаешь. Заодно, хоть, научишь, что достойно человека с университетским образованием.  ;) :P
Твой метод оптимальнее. Извеняй, Верес, так вышло - O(logN) лучше чем O(N^2)
Но повозиться придеться, конечно. Пока я это все расковыряю, как там с пайнт дивайса свой пыксель получить...


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: gil9red от Июль 21, 2015, 23:41
Твой метод оптимальнее. Извеняй, Верес, так вышло - O(logN) лучше чем O(N^2)

А как определяется когда O(logN) или O(N^2), или другое?


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Bepec от Июль 22, 2015, 10:58
to Hrundel: каким боком я тут замешан непонятно, я даже не спорил. На основании реплики Igors что я голосил?

PS рад что у тебя всё хорошо.


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Igors от Июль 22, 2015, 12:06
А как определяется когда O(logN) или O(N^2), или другое?
Вот и я недоумеваю - до чого тут logN  ???

..повозиться придеться, конечно. Пока я это все расковыряю, как там с пайнт дивайса свой пыксель получить...
Как говорят буржуины "I feel your pain" :)  Ладно, вот пример (проверял только на Вындоуз)


Название: Re: Пипетка для QGraphicsVeiw
Отправлено: Hrundel от Июль 22, 2015, 22:32
Твой метод оптимальнее. Извеняй, Верес, так вышло - O(logN) лучше чем O(N^2)

А как определяется когда O(logN) или O(N^2), или другое?

Дык все же очень просто.

O(1) => элементарный шаг в функции  => n=1+1;
O(N) => линеарный обход  => for(int i = 0; i < n; i++) {}
O(logN) => бинарный обход => for(int i = 0; i < n; i++) {if(i)}
O(N^2) => квадратный обход => for(int i = 0; i < n; i++) {for(int i = 0; i < n; i++){}}
и так далее.

Всего их 11. Всякие запредельные обходы типа факультетов и экспоненциальных в практике отсутствуют по причине долгих лет исполнения на современных компах. Кажется даже на суперкомах не дают задачи выше полимеальных и матричных инверсий. Но это все уже глухая теория.
Если есть необходимость найти оптимальный вариант, нужно смотреть на количество вероятных циклов, вложеных либо одиночных и набор условий. итоговым считается самый худший из встреченых. То есть если в методе есть  бинарный и квадратный обход отдельно друг от друга, то метод оценивается как O(N^2). Но ингода есть варианты. Так лучшие алгоритмы собственно когда-то имели худший вариант решений, но потом кто-то типа Дайкстры или Кнута находит вариант получше и получает доктора.

Привет, Верес!!! Спасибо за теплые слова. Прости, что упомянул тебя. Просто Игорь обмолвился, что ты принимал участие в дискуссии, вот я и заикнулся. Надеюсь у тебя тоже все хорошо!

Игорь, спасибо за код. Сегодня смотреть не стал - зуб болит, катострофа. Завтра обязательно посмотрю.