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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Тень в Qt  (Прочитано 16144 раз)
l_a_m
Гость
« : Май 13, 2010, 13:04 »

Доброго времени суток Ув. Коллеги!
Есть ли в Qt возможность простой реализации отбрасывания тени у диалоговых окон? (проще чем ритуальные танцы с бубном вокруг прозрачности в png)

Версия Qt:  4.6.2; ОС: Windows XP (но желательно, что бы вариант решения был кроссплатформенным и не зависели от ОС)
« Последнее редактирование: Май 13, 2010, 13:07 от l_a_m » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Май 13, 2010, 13:36 »

Цитировать
Есть ли в Qt возможность простой реализации отбрасывания тени у диалоговых окон?
Нет, т.к. отрисовкой стандартных декораций окна Qt не занимается - не её это дело.
Записан

Qt 5.11/4.8.7 (X11/Win)
l_a_m
Гость
« Ответ #2 : Май 13, 2010, 14:01 »

Цитировать
Есть ли в Qt возможность простой реализации отбрасывания тени у диалоговых окон?
Нет, т.к. отрисовкой стандартных декораций окна Qt не занимается - не её это дело.
Понятно... тогда, кто может ткнуть носом в кроссплатформенный вариант отрисовки красивостей?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Май 13, 2010, 14:10 »

Есть 2 варианта - Aero для винды и Compiz для X11.
Если вы сами будете это делать, то в лучшем случае получите глючный тормоз.
Поэтому рекомендую забить на эти "красивости".
Записан

Qt 5.11/4.8.7 (X11/Win)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Май 13, 2010, 17:12 »

кроссплатформенный вариант отрисовки красивостей?

боюсь такого нет
Записан
nixman05
Гость
« Ответ #5 : Май 13, 2010, 18:01 »

В Qt начиная с 4.6 появились классы QGraphicsEffect.

В часности QGraphicsDropShadowEffect:
http://doc.trolltech.com/4.6/qgraphicsdropshadoweffect.html
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #6 : Май 13, 2010, 19:36 »

Человек спрашивал про "возможность простой реализации отбрасывания тени у диалоговых окон".
Причём здесь QGraphicsDropShadowEffect?
Записан

Qt 5.11/4.8.7 (X11/Win)
nixman05
Гость
« Ответ #7 : Май 13, 2010, 19:44 »

Человек спрашивал про "возможность простой реализации отбрасывания тени у диалоговых окон".
Причём здесь QGraphicsDropShadowEffect?

Код
C++ (Qt)
QDialog *dialog=new QDialog();
QGraphicsDropShadowEffect *effect=new QGraphicsDropShadowEffect();
dialog->setGraphicsEffect(effect);
dialog->show();
 
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Май 13, 2010, 19:48 »

И работает? И везде?
Не верю.
Записан

Qt 5.11/4.8.7 (X11/Win)
l_a_m
Гость
« Ответ #9 : Май 14, 2010, 08:55 »

Человек спрашивал про "возможность простой реализации отбрасывания тени у диалоговых окон".
Причём здесь QGraphicsDropShadowEffect?

Код
C++ (Qt)
QDialog *dialog=new QDialog();
QGraphicsDropShadowEffect *effect=new QGraphicsDropShadowEffect();
dialog->setGraphicsEffect(effect);
dialog->show();
 

Добрый день, попробовал предложенный вами вариант реализации, так и не смог заставить диалог отбрасывать тень :-(
Есть ли ещё какие нибудь варианты?

Получилось реализовать описанный выше метод, для кнопки - она действительно отбрасывает тень на форму, а вот как бы сделать такое же но с диалогом?
« Последнее редактирование: Май 14, 2010, 09:28 от l_a_m » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Май 14, 2010, 09:36 »

Вот упёртый человек. Говорят же - средствами Qt или какого-либо другого API не получится!
Вы сами подумайте - даже если вы сможете каким-либо чудесным образом отрисовывать тень, то как вы будете доставлять нажатие мыши на участке тени, который принадлежит другому окну?! Единственный, кто сможет сделать это - это оконный менеджер.
Записан

Qt 5.11/4.8.7 (X11/Win)
l_a_m
Гость
« Ответ #11 : Май 14, 2010, 10:00 »

Вот упёртый человек. Говорят же - средствами Qt или какого-либо другого API не получится!
Вы сами подумайте - даже если вы сможете каким-либо чудесным образом отрисовывать тень, то как вы будете доставлять нажатие мыши на участке тени, который принадлежит другому окну?! Единственный, кто сможет сделать это - это оконный менеджер.

:-) эх... уговорили... забиваю большой и толстый на красивости :-) напишем в требованиях к программе ОС: Vista/7 и теоретически будет счастье, а под никсами, я думаю, там не до красивостей, либо бубен в комплекте прилагать :-)
« Последнее редактирование: Май 14, 2010, 10:03 от l_a_m » Записан
BRE
Гость
« Ответ #12 : Май 14, 2010, 10:19 »

а под никсами, я думаю, там не до красивостей, либо бубен в комплекте прилагать :-)
Если человеку нужны будут красивости, он спокойно поставит нужные пакеты и натыкает нужных галочек.  Улыбающийся
... и Венда7, на его фоне, будет выглядеть страшненьким уродцем...  Подмигивающий
Записан
offitserov
Гость
« Ответ #13 : Октябрь 05, 2010, 18:43 »

Как оказалось в результате более близкого рассмотрения тень в Qt как для диалоговых окон так и для любого top-level widget реализуется довольно просто без танцев с бубном и без новых навороченных возможностей.
Да и почему-бы это было невозможным? В Qt есть все для этого средства...
(Qt::FramelessWindowHint, Qt::SplashScreen, QWidget::setMask(), QWidget::setOpacity()).  Смеющийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Октябрь 05, 2010, 18:51 »

Рабочий пример в студию!
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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