Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Николай Кузнецов от Август 05, 2011, 00:25



Название: Прозрачность QPixmap и QSplashScreen
Отправлено: Николай Кузнецов от Август 05, 2011, 00:25
Есть PNG с прозрачным фоном. Делаю:
Код:
QPixmap pixmap("logo.png");
QSplashScreen splash(pixmap);
splash.show();

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


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: LisandreL от Август 05, 2011, 01:21
Думаю переменная прозрачность не поддерживается.
splash.setMask(pixmap.mask()); - но только видимый/невидимый, полупрозрачности не будет.


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: Николай Кузнецов от Август 05, 2011, 14:57
Очень странно, как это так, если у меня уже есть картинка с прозрачным фоном, почему она не может быть отображена как положено?
Например в программе AIMP при загрузке появляется круглый логотип программы и он естественно имеет прозрачный фон. Понятно что AIMP не на Qt написан, но результат нужен именно такой...


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: LisandreL от Август 05, 2011, 15:39
Потому что окна не умеют быть перемено прозрачными (ну по крайней мере не во всех DE).
По аимпу ничего не знаю (пользуюсь фубаром), но рискну предположить что
1) либо там одинаковая полупрозрачность по всему логотипу
2) либо он реально непрозрачный, а просто считывает нужную область экрана, использует эту картинку как подложку и рисуется поверх (но могу и ошибаться).


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: Николай Кузнецов от Август 05, 2011, 15:47
Ну ладно. Придется использовать прямоугольный сплэш(
А Вам все равно спасибо за ответы)  :)


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: GreatSnake от Август 05, 2011, 17:27
Потому что окна не умеют быть перемено прозрачными (ну по крайней мере не во всех DE).
Что подразумевается под "переменная прозрачность"? Альфа-канал? Дык ТС вроде про него ничего не говорил.


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: _OLEGator_ от Август 05, 2011, 17:48
Во вложении вариант с любой прозрачностью в любом месте для винды

Ключевым моментов является атрибут Qt::WA_TranslucentBackground


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: LisandreL от Август 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 он у меня почему-то делал полностью невидимым.


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: Николай Кузнецов от Август 06, 2011, 12:03
Всем спасибо за ответы. Это уже очень близко к поставленной задаче, но в идеале нужен рабочий сплэш с прозрачностью в тех местах где прозрачна картинка.


Название: Re: Прозрачность QPixmap и QSplashScreen
Отправлено: LisandreL от Август 06, 2011, 12:06
Оно такое и есть - смотрите на мой скриншот. Видите - код через кубики просвечивает, где есть прозрачность.