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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прозрачность окна.  (Прочитано 5243 раз)
kxk
Гость
« : Сентябрь 12, 2011, 09:00 »

Необходимо сделать прозрачность окна но при этом чтобы label который находится на этом окне с gif анимацией оставался не прозрачным. Помогите пожалуйста.
Записан
Fess
Гость
« Ответ #1 : Сентябрь 12, 2011, 10:44 »

Насколько я помню, прозрачность применяется ко всему toplevel окну. Настройка прозрачности отдельных виджетов не поддерживается.
А какая задача-то? Может есть другой путь решения проблемы?
Записан
Nimbus
Гость
« Ответ #2 : Сентябрь 12, 2011, 10:47 »

http://doc.qt.nokia.com/latest/qwidget.html#setMask
Только там либо полностью прозрачно, либо нет
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Сентябрь 12, 2011, 14:14 »

ну если это win vista,7 то можно использовать glass эффект, правда как это прикрутить в qt я не в курсе, в остальных случаях это практически нереализуемо. Разве что рисовать в bitmap все, а label накладывать и потом отображать в окне (хотя как по мне это дикий гемморой и тормоза)
Записан
Drafter
Гость
« Ответ #4 : Сентябрь 12, 2011, 16:46 »

Как-то так...

Код
C++ (Qt)
#include <QtCore>
#include <QtGui>
 
int main(int argc, char **argv)
{
   QApplication app(argc, argv);
   QWidget w;
   w.setAttribute(Qt::WA_TranslucentBackground, true);
   w.setWindowFlags(Qt::FramelessWindowHint);
   QLabel *lbl = new QLabel("The Label", &w);
   w.show();
   return app.exec();
}
Записан
Fess
Гость
« Ответ #5 : Сентябрь 12, 2011, 17:37 »

Можно реализовать свой класс окна и переопределить в нем метод отрисовки в котором в качестве фона выводить изображение с альфа каналом нужной прозрачности. На все это уже поместить лейбл с гифкой.
Записан
Drafter
Гость
« Ответ #6 : Сентябрь 12, 2011, 23:46 »

Цитировать
Можно реализовать свой класс окна и переопределить в нем метод отрисовки в котором в качестве фона выводить изображение с альфа каналом нужной прозрачности.

Любой виджет и так (неявно) - изображение. Поэтому достаточно в paintEvent привязать к нему QPainter'а и закрасить в (полу)прозрачный цвет.

Код
C++ (Qt)
void TransparentWidget::paintEvent(QPaintEvent *event)
{
       QPainter p(this);
       p.fillRect(event->rect(), Qt::transparent);
       p.end();
}
 

При этом, если виджет выступает в роли главного окна приложения, надо включить ему атрибут setAttribute(Qt::WA_TranslucentBackground, true), и убрать системную рамку setWindowFlags(Qt::FramelessWindowHint).
« Последнее редактирование: Сентябрь 12, 2011, 23:51 от Drafter » Записан
kxk
Гость
« Ответ #7 : Сентябрь 13, 2011, 06:26 »

Большое всем спасибо вот решение

Код:
    ui->setupUi(this);
    QMovie *movie = new QMovie("D:/01.gif");
    ui->label->setMovie(movie);
    movie->start();
    this->setAttribute(Qt::WA_TranslucentBackground );
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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