Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: OS2 от Ноября 05, 2008, 16:25



Название: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: OS2 от Ноября 05, 2008, 16:25
Всем доброго времени суток!
Собственно возникла необходимость эмулировать поле нажатия(ну чтоб там курсор изменялся и реакция на нажатие была). Для этого создал класс, унаследованный от QWidget, перегрузил все необходимые функции и т.д...с реализацией все в порядке. Но, возникла проблема, как сделать поле нажатия прозрачным?
Пытался сделать при помощи:
Код:
	QPalette pal;
pal = palette();
pal.setBrush( QPalette::Window, Qt::transparent );
setPalette( pal );
не помогло.

Всем заранее спасибо.


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: OS2 от Ноября 06, 2008, 14:41
Ну что, никто подсказать не может?  :(


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: SASA от Ноября 06, 2008, 16:18
Код:
void Widget::paintEvent ( QPaintEvent * event ) 
{
QRect rc = event->rect();
QPainter painter(this);
painter.fillRect(rect(), QBrush(Qt::transparent));
}


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: OS2 от Ноября 06, 2008, 16:43
Уже пробовал, не помогает.
Вот что получается (см. вложенный файл).
Не знаю уже что и делать....всю голову сломал....  :(  :(  :(


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: lit-uriy от Ноября 06, 2008, 21:26
посмотри QWidget::windowOpacity


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: OS2 от Ноября 07, 2008, 00:13
Пробовал шаманить с setWindowOpacity() - не помогает.

ЗЫ: windowOpacity(), кстати, возвращает: 1.0


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: spirit от Ноября 07, 2008, 10:08
setWindowOpacity будет работать тогда, когда его установить для родительского окна. т.е. если делать setWindowOpacity для чилда -- нифига не выйдет.


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: OS2 от Ноября 07, 2008, 11:26
Так существует "относительно простой" способ сделать чилдовское окно прозрачным?


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: SASA от Ноября 07, 2008, 17:31
Уже пробовал, не помогает.
Вот что получается (см. вложенный файл).
Не знаю уже что и делать....всю голову сломал....  :(  :(  :(

Я перекрываю у чилдового окна paintEvent. Если он видим - рисуем чё хотим, не видим - заливаем прозрачной кисточкой. Только у окна не должен быть включён флаг PaintOnScreen.
И попробуй перерисовать родителя в этом месте.


Название: Re: Прозрачные виджеты (или: как эмулировать поле нажатия?)
Отправлено: OS2 от Ноября 07, 2008, 19:42
Спасибо за подсказку!

Цитировать
Только у окна не должен быть включён флаг PaintOnScreen.
Там действительно был включен setAttribute( Qt::WA_PaintOnScreen );