Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: pitekantrop от Января 22, 2010, 11:30



Название: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 11:30
Всем привет. Вопрос такой: как сделать так, чтобы картинка с альфаканалом корректно отображалась на видгете? Если просто поместить её на оный, то альфаканал будет игнорироваться, и картинка будет отображаться не так, как, например, над объектом типа QGraphicsView. Заранее спасибо.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 22, 2010, 12:38
Нарисуйте чего вы хотите добиться.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 12:52
картинка на виджете выглядит так: http://img42.imageshack.us/img42/390/19336189.png, а должна иметь вид http://img704.imageshack.us/img704/5029/42539447.png (т.к. имеет альфаканал)


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SASA от Января 22, 2010, 13:34
Я рисовал в паитере. Сначала заливал паинтер прозрачным цветом, потом отрисовывал туда куртинку.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 14:35
Пробовал и так - результат такой же..
И у Вас альфаканал начинал работать?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SASA от Января 22, 2010, 15:04
Вы рисете через Qpixmap? Если да, то что возвращает QPixmap::hasAlpha?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 15:22
да, true - в противном случае все было бы гораздо проще.. )


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 22, 2010, 15:27
У виджета стоит setAutofilBackground(false)?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: lit-uriy от Января 22, 2010, 16:15
всё должно быть нормально с альфа каналом.
А из приведённых картинок я альфа канала в упор не наблюдаю, только чёрный фон.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 16:25
У виджета стоит setAutofilBackground(false)?
ставил - результат не меняется..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 16:43
всё должно быть нормально с альфа каналом.
в мире еще не должно быть войн, голодных детей и ненависти.. )
А из приведённых картинок я альфа канала в упор не наблюдаю, только чёрный фон.
дело не в фоне, а в отображении самой картинки..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: ax от Января 22, 2010, 16:43
Если виджет top-level добавь
Код:
widget->setWindowFlags(Qt::FramelessWindowHint);
widget->setAttribute(Qt::WA_TranslucentBackground);


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 16:55
наверное помогло бы, но у меня версия Qt 4.4.3 - там этой фичи нет..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: ax от Января 22, 2010, 17:05
Тогда может http://www.qtcentre.org/wiki.php?title=ARGB-Widgets (http://www.qtcentre.org/wiki.php?title=ARGB-Widgets) поможет.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 22, 2010, 17:13
Что это за виджет кнопка, который является отдельным окном?

Выложите минимальный компилируемый пример.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 17:19
Тогда может http://www.qtcentre.org/wiki.php?title=ARGB-Widgets (http://www.qtcentre.org/wiki.php?title=ARGB-Widgets) поможет.
спасибо, буду ковырять..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 22, 2010, 17:37
Что это за виджет кнопка, который является отдельным окном?

Выложите минимальный компилируемый пример.

Есть приложение-видеоплеер с главным окном, пронаследованным от QWidget'а. При нажатии на "паузу" поверх видео появляется виджет типа QLabel c загруженной в него картинкой с альфаканалом (см. ссылки выше). Проблема в том, что при добавлении, например, в объект класса QGraphicsScene картинка рисуется с учетом альфаканала, а при добавлении в QLabel альфаканал игнорируется


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: lit-uriy от Января 22, 2010, 18:16
>>а при добавлении в QLabel альфаканал игнорируется
чушь собачья, всё учитывается.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SASA от Января 23, 2010, 11:37
Я думаю дело в картинке.
Накидал примерчик.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 25, 2010, 11:30
чушь собачья, всё учитывается.
на каком основании сделан столь резкий и категоричный вывод?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 25, 2010, 11:40
Я думаю дело в картинке.
Накидал примерчик.
откуда взят файл "ui_alpha.h"?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: Авварон от Января 25, 2010, 11:45
сгенерён дизайнером


Название: Re: Корректное отображение картинки с альфа&#
Отправлено: SASA от Января 25, 2010, 11:50
Он получается после обработки alpha.ui специальным кутэшным парсером.
Если интересно, прочитейте у Шлее как происходит компиляция кутэшных проектов. По-моему, там есть очень красивая и понятная диаграмка.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SASA от Января 25, 2010, 11:51
сгенерён дизайнером
Нет. Дизайнером сгенерён alpha.ui.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: Авварон от Января 25, 2010, 11:53
уболтал, uic'ом... в старые добрые времена приходилось сохранять код формочек ручками из дизайнера... к-ый и звал уик где-то там в фоне


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 25, 2010, 12:59
Ситуация оказалась довольно простой: сама картинка рисуется на объекте QLabel с учетом альфаканала, но из-за серого фона самого объекта QLabel кажется, что альфаканал игнорируется.. В моем случае, наверное, единственным выходом будет использование http://www.qtcentre.org/wiki.php?title=ARGB-Widgets. Всем спасибо и удачи!


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 25, 2010, 13:16
Ситуация оказалась довольно простой: сама картинка рисуется на объекте QLabel с учетом альфаканала, но из-за серого фона самого объекта QLabel кажется, что альфаканал игнорируется.. В моем случае, наверное, единственным выходом будет использование http://www.qtcentre.org/wiki.php?title=ARGB-Widgets. Всем спасибо и удачи!

Ты рисуешь картинку на QLabel через paintEvent() или ставишь через метод? У меня все нормально работает через метод setPixmap()

(http://img63.imageshack.us/img63/6834/qlabelalpha.png)


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: Kolobok от Января 25, 2010, 13:22
Ситуация оказалась довольно простой: сама картинка рисуется на объекте QLabel с учетом альфаканала, но из-за серого фона самого объекта QLabel кажется, что альфаканал игнорируется.. В моем случае, наверное, единственным выходом будет использование http://www.qtcentre.org/wiki.php?title=ARGB-Widgets. Всем спасибо и удачи!

А что мешает сделать фон прозрачным?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 25, 2010, 13:54
Ты рисуешь картинку на QLabel через paintEvent() или ставишь через метод? У меня все нормально работает через метод setPixmap()

пробовал и так, и так - разницы никакой..
если я не ошибаюсь, приведенная картинка не имеет альфаканала..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 25, 2010, 13:56
А что мешает сделать фон прозрачным?

если Вы имеете ввиду, в paintEvent'е сначала залить область Qt::transparent, а затем на ней рисовать QPixmap, то результат не меняется..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 25, 2010, 14:07
пробовал и так, и так - разницы никакой..
если я не ошибаюсь, приведенная картинка не имеет альфаканала..

Общая картинка нет, а pixmap шарика с альфа-каналом.

В общем как я и просил выше нужен материал с которым можно работать - компилируемый пример с проблемой. Писать свой видео-плеер с такими кнопочками времени нет ни у кого.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: Kolobok от Января 25, 2010, 19:22
А что мешает сделать фон прозрачным?

если Вы имеете ввиду, в paintEvent'е сначала залить область Qt::transparent, а затем на ней рисовать QPixmap, то результат не меняется..

Нет, я имел ввиду следующее...
Код:
label->setPixmap( ... );
label->setAutoFillBackground( true );
QPalette palette = label->palette();
palette.setColor( label->backgroundRole(), Qt::transparent );
label->setPalette( palette );


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 26, 2010, 11:30
Помогло тупо выставление setAutoFillBackground(false) для самой QLabel и для видгета, на который она выводилась..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 26, 2010, 11:47
А нет, не помогло.. ) Оказывается, при отображении над объектом типа QWidget альфаканал действительно работает, но при отображении картинки поверх видео он игнорируется.. Похоже, просто извращениями с Qt тут не обойтись.. )


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 26, 2010, 12:44
А нет, не помогло.. ) Оказывается, при отображении над объектом типа QWidget альфаканал действительно работает, но при отображении картинки поверх видео он игнорируется.. Похоже, просто извращениями с Qt тут не обойтись.. )

Видео через phonon выводится?


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 26, 2010, 13:53
через DirectShow


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 26, 2010, 14:22
через DirectShow

Имхо с этого и надо было начинать. Окно DirectShow не Qt'шное ведь? Тут максимум что можно попытаться сделать - создать top level widget с флагом Qt::FramelessWindowHint и рисовать на него свою картинку с альфаканалом. Не факт, что будет работать, но попробовать можно.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 26, 2010, 14:41
Имхо с этого и надо было начинать. Окно DirectShow не Qt'шное ведь? Тут максимум что можно попытаться сделать - создать top level widget с флагом Qt::FramelessWindowHint и рисовать на него свою картинку с альфаканалом. Не факт, что будет работать, но попробовать можно.
Qt'шное, но альфаканал на нем все равно почему-то не работает..


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: SABROG от Января 26, 2010, 15:00
Qt не умеет создавать DirectShow окна, только phonon.


Название: Re: Корректное отображение картинки с альфаканалом на виджете
Отправлено: pitekantrop от Января 26, 2010, 16:13
Qt не умеет создавать DirectShow окна, только phonon.
создаем мы и вставляем в объект типа QMdiSubWindow, растянутое на весь экран