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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Прозрачность QPixmap и QSplashScreen  (Прочитано 8341 раз)
Николай Кузнецов
Гость
« : Август 05, 2011, 00:25 »

Есть PNG с прозрачным фоном. Делаю:
Код:
QPixmap pixmap("logo.png");
QSplashScreen splash(pixmap);
splash.show();

сплэш не прозрачный( что делать? Вроде нужно альфа канал както установить на pixmap'e верно? Хотя картинка итак вроде прозрачная... Вообщем подскажите кто знает пожалуйста.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 05, 2011, 01:21 »

Думаю переменная прозрачность не поддерживается.
splash.setMask(pixmap.mask()); - но только видимый/невидимый, полупрозрачности не будет.
Записан
Николай Кузнецов
Гость
« Ответ #2 : Август 05, 2011, 14:57 »

Очень странно, как это так, если у меня уже есть картинка с прозрачным фоном, почему она не может быть отображена как положено?
Например в программе AIMP при загрузке появляется круглый логотип программы и он естественно имеет прозрачный фон. Понятно что AIMP не на Qt написан, но результат нужен именно такой...
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Август 05, 2011, 15:39 »

Потому что окна не умеют быть перемено прозрачными (ну по крайней мере не во всех DE).
По аимпу ничего не знаю (пользуюсь фубаром), но рискну предположить что
1) либо там одинаковая полупрозрачность по всему логотипу
2) либо он реально непрозрачный, а просто считывает нужную область экрана, использует эту картинку как подложку и рисуется поверх (но могу и ошибаться).
Записан
Николай Кузнецов
Гость
« Ответ #4 : Август 05, 2011, 15:47 »

Ну ладно. Придется использовать прямоугольный сплэш(
А Вам все равно спасибо за ответы)  Улыбающийся
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Август 05, 2011, 17:27 »

Потому что окна не умеют быть перемено прозрачными (ну по крайней мере не во всех DE).
Что подразумевается под "переменная прозрачность"? Альфа-канал? Дык ТС вроде про него ничего не говорил.
Записан

Qt 5.11/4.8.7 (X11/Win)
_OLEGator_
Гость
« Ответ #6 : Август 05, 2011, 17:48 »

Во вложении вариант с любой прозрачностью в любом месте для винды

Ключевым моментов является атрибут Qt::WA_TranslucentBackground
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #7 : Август 05, 2011, 18:09 »

Вынужден признать, что наврал:

Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
   QApplication app(argc, argv);
   {
       QPixmap pixmap("C:/1.png");
       QLabel splash;
       splash.setPixmap(pixmap);
       splash.setAttribute(Qt::WA_TranslucentBackground);
       splash.setWindowFlags(Qt::FramelessWindowHint);
       splash.setAutoFillBackground( false );
       splash.setMask(pixmap.mask());
       splash.show();
       doSomeLongRoutine();
   }
   Widget w;
   w.show();
   return app.exec();
}

P.S. _OLEGator_ опередил.
Вчера с этим (Qt::WA_TranslucentBackground) флагом экспериментировал, но QSplashScreen он у меня почему-то делал полностью невидимым.
Записан
Николай Кузнецов
Гость
« Ответ #8 : Август 06, 2011, 12:03 »

Всем спасибо за ответы. Это уже очень близко к поставленной задаче, но в идеале нужен рабочий сплэш с прозрачностью в тех местах где прозрачна картинка.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #9 : Август 06, 2011, 12:06 »

Оно такое и есть - смотрите на мой скриншот. Видите - код через кубики просвечивает, где есть прозрачность.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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