Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QPainter - Как рисовать прозрачностью? 
:(
    Опции темы
wowka19
Дата 17.4.2014, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



Есть объект от QGraphicsItem.
В QGraphicsItem::paint() сначала рисуется всякое, а потом некоторую прямоугольную область из этого нужно удалить, НО так чтобы эта область стала прозрачной и сквозь нее были видны (проглядывали) другие объекты сцены (с меньшим Z).
QPainter::eraseRect() - не помог, он закрашивает область былым, а нужно "запрозрачнить" ее, как будто там ничего не рисовалось.

Это сообщение отредактировал(а) wowka19 - 17.4.2014, 07:00
PM MAIL   Вверх
math64
Дата 17.4.2014, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



По идее, нужно рисовать цветом созданным конструктором QColor(r, g, b, a); Параметр a задеет прозрачность a=255 - непрозрачный цвет, a=0 - полностью прозрачный цвет. Но в Qt я не пробовал.
PM   Вверх
wowka19
Дата 17.4.2014, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



уже так пробовал - эффект = 0
PM MAIL   Вверх
math64
Дата 17.4.2014, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



PS: Если нужно рисовать не закрашенный прямоугольник, кисть для него нужно задать QBrush(Qt::NoBrush);
PM   Вверх
wowka19
Дата 17.4.2014, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 30.11.2011

Репутация: нет
Всего: нет



и так тоже пробовал - эффект = 0 ()ничего не рисуется

Добавлено через 2 минуты и 29 секунд
+ еще вопрос: хочу сделать составной элемент из QGraphucsItem'ов (или QGraphicsObject'ов). Что мне использовать? QGraphucsItemGroup или QGraphucsItem в качестве родителя?
PM MAIL   Вверх
math64
Дата 17.4.2014, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



По идее, достаточно QGraphicsItemGroup. Но у меня с ним были проблемы, не помню какие, делал свой класс производный от QGraphicsItem.

При рисовании обычных виджетов прозрачность и Qt::NoBrush работает - сейчас смотрел Gradients Demo.
PM   Вверх
bsa
Дата 17.4.2014, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



wowka19, паинтер заменяет пиксели в момент отрисовки. Таким образом, восстановить нижний слой невозможно иначе, как отрисовав его заново. Как вариант, ты можешь нарисовать верхний слой в отдельный QImage. Затем отрисовать видимые куски верхнего слоя поверх нижнего.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.