crossplatform.ru

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

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Грамотная отрисовка рельефа, что-то не получается
Tonal
  опции профиля:
сообщение 15.12.2008, 12:28
Сообщение #21


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Ну, я бы сделал примерно так:
1. При изменении размеров окна создал QImage с нужными размерами остальными параметрами.
2. На ей нарисовал всё, что нужно (можно в отдельном потоке).
3. По окончанию её отрисовки пнул перерисовку окна.
4. В paintEvent() выводил енту картинку, ежели она есть. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.12.2008, 12:34
Сообщение #22


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

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

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




Репутация:   94  


Цитата(Tonal @ 15.12.2008, 15:28) *
На ей нарисовал всё, что нужно (можно в отдельном потоке).
в этом-то и проблема, QImage находится в модуле QtGui, а его компоненты вроде как в отдельный поток совать нельзя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 15.12.2008, 17:04
Сообщение #23


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата
Ну, я бы сделал примерно так:
1. При изменении размеров окна создал QImage с нужными размерами остальными параметрами.
2. На ей нарисовал всё, что нужно (можно в отдельном потоке).
3. По окончанию её отрисовки пнул перерисовку окна.
4. В paintEvent() выводил енту картинку, ежели она есть. :)

Подобный трюк пытался провернуть с QPixmap - не вышло. При этом при изменении размеров почему-то ломался. Почему - отдебажить не удалось. Сможете помочь разобраться? :)))) И как это сделать с QImage?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 16.12.2008, 11:45
Сообщение #24


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Цитата
Because QImage is a QPaintDevice subclass, QPainter can be used to draw directly onto images. When using QPainter on a QImage, the painting can be performed in another thread than the current GUI thread.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.1.2009, 12:19
Сообщение #25


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

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата
Ну, я бы сделал примерно так:
1. При изменении размеров окна создал QImage с нужными размерами остальными параметрами.
2. На ей нарисовал всё, что нужно (можно в отдельном потоке).
3. По окончанию её отрисовки пнул перерисовку окна.
4. В paintEvent() выводил енту картинку, ежели она есть. :)

А можно хоть просто наброски куска кода, либо отсылка к примеру, где используется именно QImage! Даже не знаю как рисовать. Буду благодарен за помощь. Просто этот же прием (отрисовку на QImage), как я понял, еще и для другой цели можно использовать. Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 20.1.2009, 10:23
Сообщение #26


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(AD @ 3.12.2008, 10:56) *
Тут почитал многое и понял, что эту функцию я могу использовать только в paintEvent()! Но еще кое-что заметил и понял, что по сути ее следует вызывать, только при изменении размеров окна.


её это какую функцию?
вот в примере %QTDIR%examples\painting\painterpaths\ при изменении свойств объектов вызывается update(). в описании слота написано:
Цитата
Updates the widget unless updates are disabled or the widget is hidden.

This function does not cause an immediate repaint; instead it schedules a paint event for processing when Qt returns to the main event loop. This permits Qt to optimize for more speed and less flicker than a call to repaint() does.

Calling update() several times normally results in just one paintEvent() call.


мне тоже скоро предстоит рисовать думаю попробовать этот метод.
Изменение свойств объектов рисования, размеров угла поворота колличества линий и т.д.
потом update() кстати можно лишь того rect() который нужно рисовать заново.

как пишут, в qt4 реализрвана двойная буферизация автоматически т.к. что думаю особой необходимости рисовать на картинках нет. т.к. получится двойная работа по идее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.4.2024, 6:36