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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Как дорисовать точку?  (Прочитано 9279 раз)
phpCoder
Гость
« : Январь 09, 2015, 15:03 »

Есть виджет. По нему тыкают мышью - на экране должна нарисоваться точка в месте, где тыкнули. Как нарисовать там точку?
Непонятно:
1. как собственно дорисовать точку. Именно ДОрисовать, а не перерисовать весь экран?
2. настройка рисовальщика. Смотрел примеры - какие-то они убогие. Везде в paintEvent определяется Qpainter, его настройки и прочее. Это что же получается: миллиард раз этот метод будет вызван, миллиард раз создастся пейнтер и в миллиардный раз в него поставят те же самые настройки?
А я хочу определить его в конструкторе класса, запихнуть в него все что нужно - антиалиасинг, ручку и т.д. и уже после этого рисовать. Что для этого нужно?
Записан
Bepec
Гость
« Ответ #1 : Январь 09, 2015, 15:09 »

Вы не представляете себе всех широт открытий. Да, именно 100500 раз будет вызван пейнтер и перерисован) А чтобы вам дорисовать точечку, то надо лишь добавить свою секцию отрисовки в paintEvent Веселый
Записан
phpCoder
Гость
« Ответ #2 : Январь 09, 2015, 15:14 »

Зачем так по-глупому сделано? 100500 раз выполнить однотипные действия... - это же не приложение будет, а улитка какая-то.
Записан
Bepec
Гость
« Ответ #3 : Январь 09, 2015, 15:23 »

Скорость отрисовки на уровне) А вы никогда не задумывались, что при нажатии кнопки перерисовывается эдак 400-500 точек ) А при слайдинге перерисовывается до несколько сотен тысяч за пару секунд Веселый

PS не парься, всё быстро и путём Улыбающийся
Записан
phpCoder
Гость
« Ответ #4 : Январь 09, 2015, 16:36 »

Ну и как дорисовать точку?

Точек два вида - одни красные и круглые, а другие - синие и квадратные. Тип задает юзером через комбобокс. Точки складируются в массив. Тип точки - тоже в массив.

В paintEvent прогонять массив в цикле и сменять на каждой итерации ручку не хочу. Это извращение.
Как тогда?
Записан
Bepec
Гость
« Ответ #5 : Январь 09, 2015, 17:03 »

Точки всегда квадратные ибо пиксель квадратный Веселый

У вас видимо круги и квадраты Улыбающийся

А что вы предлагаете? Как вы ещё можете отрисовать N количество кругов и квадратов, кроме как храня их координаты в массиве и проходя по ним в цикле? Улыбающийся

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

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Январь 09, 2015, 17:47 »

PS может вы придумаете новый способ или конструкцию языка для этого?
Можно дорисовывать фигуры на QImage, а уже его рисовать на виджет.
Записан
Bepec
Гость
« Ответ #7 : Январь 09, 2015, 19:13 »

Ну и стоить добавить, что Qt так и делает Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Январь 09, 2015, 19:16 »

Ну и стоить добавить, что Qt так и делает Улыбающийся
При чем здесь Qt?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #9 : Январь 09, 2015, 21:05 »

PS может вы придумаете новый способ или конструкцию языка для этого?
Можно дорисовывать фигуры на QImage, а уже его рисовать на виджет.

Тогда следующая тема будет называться "как удалить точку"  Подмигивающий Веселый
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Bepec
Гость
« Ответ #10 : Январь 09, 2015, 21:27 »

Потому что Qt использует двойную буферизацию и в качестве буфера по умолчанию QImage Улыбающийся
Так что  принцип тот же Веселый

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

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Январь 09, 2015, 21:39 »

Потому что Qt использует двойную буферизацию и в качестве буфера по умолчанию QImage Улыбающийся
Так что  принцип тот же Веселый

PS оммм, хотя в пятерке хз как Улыбающийся
Да какая разница, как это где делается.

Вы сокрушались, что других способов нет:
Как вы ещё можете отрисовать N количество кругов и квадратов, кроме как храня их координаты в массиве и проходя по ним в цикле? Улыбающийся

Я вам предложил еще один вариант.
Записан
Hrundel
Гость
« Ответ #12 : Январь 09, 2015, 22:31 »

Ну и как дорисовать точку?

Точек два вида - одни красные и круглые, а другие - синие и квадратные. Тип задает юзером через комбобокс. Точки складируются в массив. Тип точки - тоже в массив.

В paintEvent прогонять массив в цикле и сменять на каждой итерации ручку не хочу. Это извращение.
Как тогда?

А может быть для начала лучше книжку Шлее почитать? Там и про точечки, и про кружочки,... и даже про квадратики.
Записан
Bepec
Гость
« Ответ #13 : Январь 09, 2015, 23:01 »

Old, чтобы отрисовать кучу кружочков и квадратиков нужно всё равно
Цитировать
прогонять массив в цикле
.
Твоё предложение это скорее просто перенос того же кода в другое место Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #14 : Январь 09, 2015, 23:07 »

Old, чтобы отрисовать кучу кружочков и квадратиков нужно всё равно
Цитировать
прогонять массив в цикле
.
Твоё предложение это скорее просто перенос того же кода в другое место Улыбающийся
Какой массив?
Юзер клацнул в экран - нарисовали фигуру, еще раз клацнул - еще одну.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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