Russian Qt Forum
Августа 27, 2025, 03:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прозрачные виджеты (или: как эмулировать поле нажатия?)  (Прочитано 6170 раз)
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« : Ноября 05, 2008, 16:25 »

Всем доброго времени суток!
Собственно возникла необходимость эмулировать поле нажатия(ну чтоб там курсор изменялся и реакция на нажатие была). Для этого создал класс, унаследованный от QWidget, перегрузил все необходимые функции и т.д...с реализацией все в порядке. Но, возникла проблема, как сделать поле нажатия прозрачным?
Пытался сделать при помощи:
Код:
	QPalette pal;
pal = palette();
pal.setBrush( QPalette::Window, Qt::transparent );
setPalette( pal );
не помогло.

Всем заранее спасибо.
« Последнее редактирование: Ноября 05, 2008, 22:26 от OS2 » Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #1 : Ноября 06, 2008, 14:41 »

Ну что, никто подсказать не может?  Грустный
Записан
SASA
Гость
« Ответ #2 : Ноября 06, 2008, 16:18 »

Код:
void Widget::paintEvent ( QPaintEvent * event ) 
{
QRect rc = event->rect();
QPainter painter(this);
painter.fillRect(rect(), QBrush(Qt::transparent));
}
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #3 : Ноября 06, 2008, 16:43 »

Уже пробовал, не помогает.
Вот что получается (см. вложенный файл).
Не знаю уже что и делать....всю голову сломал....  Грустный  Грустный  Грустный
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Ноября 06, 2008, 21:26 »

посмотри QWidget::windowOpacity
Записан

Юра.
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #5 : Ноября 07, 2008, 00:13 »

Пробовал шаманить с setWindowOpacity() - не помогает.

ЗЫ: windowOpacity(), кстати, возвращает: 1.0
Записан
spirit
Гость
« Ответ #6 : Ноября 07, 2008, 10:08 »

setWindowOpacity будет работать тогда, когда его установить для родительского окна. т.е. если делать setWindowOpacity для чилда -- нифига не выйдет.
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #7 : Ноября 07, 2008, 11:26 »

Так существует "относительно простой" способ сделать чилдовское окно прозрачным?
Записан
SASA
Гость
« Ответ #8 : Ноября 07, 2008, 17:31 »

Уже пробовал, не помогает.
Вот что получается (см. вложенный файл).
Не знаю уже что и делать....всю голову сломал....  Грустный  Грустный  Грустный

Я перекрываю у чилдового окна paintEvent. Если он видим - рисуем чё хотим, не видим - заливаем прозрачной кисточкой. Только у окна не должен быть включён флаг PaintOnScreen.
И попробуй перерисовать родителя в этом месте.
Записан
OS2
Самовар
**
Offline Offline

Сообщений: 186



Просмотр профиля WWW
« Ответ #9 : Ноября 07, 2008, 19:42 »

Спасибо за подсказку!

Цитировать
Только у окна не должен быть включён флаг PaintOnScreen.
Там действительно был включен setAttribute( Qt::WA_PaintOnScreen );
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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