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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пипетка для QGraphicsVeiw  (Прочитано 5989 раз)
Hrundel
Гость
« : Июль 20, 2015, 15:37 »

Всем привет!

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

Всем спасибо.
Записан
Bepec
Гость
« Ответ #1 : Июль 20, 2015, 16:03 »

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

PS можно и grabWidget, но у рендера преимущество в виде передаваемой области Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Июль 20, 2015, 16:26 »

В смысле сграбить пыксель? Ну рендерить на каждое движение мыши - просто недостойно человека с университетским образованием Улыбающийся Надо через QBackingStore, там выскочить на QPaintDevice который привести к QImage. Уже давненько так лазил садами-огородами (помню только Верес голосил  Улыбающийся) но получалось, точно. Др словами до буфера окна достучаться можно.
Записан
Hrundel
Гость
« Ответ #3 : Июль 20, 2015, 21:16 »

Ладно, извращусь - посчитаю, что оптимальнее.   Подмигивающий

Спасибо всем.
Записан
Hrundel
Гость
« Ответ #4 : Июль 21, 2015, 22:33 »

Ох, Игорь, глыбоко ты все-таки Кутешные классы знаешь. Заодно, хоть, научишь, что достойно человека с университетским образованием.  Подмигивающий Показает язык
Твой метод оптимальнее. Извеняй, Верес, так вышло - O(logN) лучше чем O(N^2)
Но повозиться придеться, конечно. Пока я это все расковыряю, как там с пайнт дивайса свой пыксель получить...
« Последнее редактирование: Июль 21, 2015, 22:38 от Hrundel » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июль 21, 2015, 23:41 »

Твой метод оптимальнее. Извеняй, Верес, так вышло - O(logN) лучше чем O(N^2)

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

Bepec
Гость
« Ответ #6 : Июль 22, 2015, 10:58 »

to Hrundel: каким боком я тут замешан непонятно, я даже не спорил. На основании реплики Igors что я голосил?

PS рад что у тебя всё хорошо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июль 22, 2015, 12:06 »

А как определяется когда O(logN) или O(N^2), или другое?
Вот и я недоумеваю - до чого тут logN  Непонимающий

..повозиться придеться, конечно. Пока я это все расковыряю, как там с пайнт дивайса свой пыксель получить...
Как говорят буржуины "I feel your pain" Улыбающийся  Ладно, вот пример (проверял только на Вындоуз)
Записан
Hrundel
Гость
« Ответ #8 : Июль 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). Но ингода есть варианты. Так лучшие алгоритмы собственно когда-то имели худший вариант решений, но потом кто-то типа Дайкстры или Кнута находит вариант получше и получает доктора.

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

Игорь, спасибо за код. Сегодня смотреть не стал - зуб болит, катострофа. Завтра обязательно посмотрю.
« Последнее редактирование: Июль 22, 2015, 22:38 от Hrundel » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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