Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: jasf от Октябрь 19, 2009, 10:38



Название: содержание родительского виджета
Отправлено: jasf от Октябрь 19, 2009, 10:38
Здравствуйте. Хочется следующего. Есть, получается, backgroundWidget. :) В нём есть дочерние виджеты (ну или лайоуты..). И хочется, что бы, когда я перерисовываю дочерний виджет (допустим вывожу полупрозрачный QImage), данный QImage рисовался поверх содержания отцовского виджета, которое является графическим. Ну т.е. полупрозрачная картинка поверх просто картинки( которая отображается в backgroundWidget::painterEvent.) Спасибо :)
P.S. только читаю книгу по Qt.. до каскадных стилей ещё не дошёл )


Название: Re: содержание родительского виджета
Отправлено: SABROG от Октябрь 19, 2009, 12:10
Нарисуй в пейнте как ты себе это представляешь, из описания я ничего не понял.


Название: Re: содержание родительского виджета
Отправлено: jasf от Октябрь 19, 2009, 13:23
ну вот приблизительно:
возьмём левое изображение = 1
правое = 2

предположим, что первое изображение - это просто splashscreen, хранящийся в QImage. НУ т.е. без логических элементов. За отображение данного элемента отвечает
MyWidget backgroundWidget;
..
MyWidget::painterEvent()
{
QPainter painter(this);
painter.draw(image);
}


в последствии, я в backgroundWidget вкладываю дочерний виджет. пусть этим виджетом будет квадрат, содержащийся на 2ом рисунке (там где подкл-откл, .. Выход ). Опять же, данный квадрат (на рисунке выглядит как меню...) пусть будет являться вторым изображением, хранящимся в QImage. Так вот, я хочу во втором, дочернем виджете, отрисовать QImage с указанием альфа величины.. что-бы на выходе получил примерно то, что показано на рисунке. Т.е. смешать содержание backgroundWidget и дочернего виджета. Т.е. посути, перед тем, как произойдёт отрисовка дочернего виджета, backgroundWidget должен восстановить своё содержимое в QPainter дочернего виджета.. как то-так.


Название: Re: содержание родительского виджета
Отправлено: jasf от Октябрь 19, 2009, 13:33
Или вот на этом изображении лучше понятно. Тот полупрозрачный затемнённый виджет находится над списком контактов. Хоть и является полупрозрачным. А так же является виджетом. Вот как реализовать похожий функционал? :) Спасибо


Название: Re: содержание родительского виджета
Отправлено: SABROG от Октябрь 19, 2009, 14:40
Типа этого (http://wiki.crossplatform.ru/index.php/%D0%A0%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%B2%D0%B5%D1%80%D1%85_%D0%B4%D0%BE%D1%87%D0%B5%D1%80%D0%BD%D0%B8%D1%85_%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D0%BE%D0%B2)?


Название: Re: содержание родительского виджета
Отправлено: jasf от Октябрь 19, 2009, 15:06
За ссылку спасибо. Но хочется, наверное, не просто рисование "руками", а что-бы поверх был именно widget со свойствами полупрозрачности. Хотя, видимо, мне поможет qt 4.6 beta1. там нечто похожее вроде-как есть.


Название: Re: содержание родительского виджета
Отправлено: Igors от Октябрь 19, 2009, 15:29
Если бы каждый кто делает полу/прозрачность "подручными средствами" просто написал бы в Qt такой feature request - то глядишь в следующей версии и имели бы что-то штатное (вместо бестолковых Crerator'ов)   :)


Название: Re: содержание родительского виджета
Отправлено: baka от Октябрь 19, 2009, 17:42
при рисовании дочернего виджета, попробуй в QPainter задавать Opacity

Код:
QPainter painter(this);
painter.setOpacity(n);

painter.setBrush(QColor(133, 164, 214,  200));
painter.setPen(QColor(133, 164, 214,  255));

где n - от 0.0 до 1.0

получится примерно как на рисунке.

ЗЫ: т.е. если я правильно понял тебе нужен полупрозрачный виджет который может находится где угодно и сквозь который видно все что под ним.(т.е. другие виджеты или рабочий стол.


Название: Re: содержание родительского виджета
Отправлено: SASA от Октябрь 19, 2009, 18:20
Если виджет чилдовый (т.е. имеет парента) то просто рисуй полупрозрачными :D красками.
Для топ левел виджетов используй свойство windowOpacity.


Название: Re: содержание родительского виджета
Отправлено: Marat(Qt) от Октябрь 19, 2009, 21:01
Вот кнопку прозрачную сделал... палитру потправил просто...


Название: Re: содержание родительского виджета
Отправлено: spectre71 от Октябрь 20, 2009, 07:02
За ссылку спасибо. Но хочется, наверное, не просто рисование "руками", а что-бы поверх был именно widget со свойствами полупрозрачности. Хотя, видимо, мне поможет qt 4.6 beta1. там нечто похожее вроде-как есть.

void QWidget::setWindowOpacity ( qreal level )


Название: Re: содержание родительского виджета
Отправлено: jasf от Октябрь 21, 2009, 11:53
За ссылку спасибо. Но хочется, наверное, не просто рисование "руками", а что-бы поверх был именно widget со свойствами полупрозрачности. Хотя, видимо, мне поможет qt 4.6 beta1. там нечто похожее вроде-как есть.

void QWidget::setWindowOpacity ( qreal level )

Спасибо, обязательно проверю

Вот кнопку прозрачную сделал... палитру потправил просто...
вот если-бы ещё пример исходного кода  :)


Название: Re: содержание родительского виджета
Отправлено: Marat(Qt) от Октябрь 22, 2009, 12:49
Цитировать
вот если-бы ещё пример исходного кода
исходного кода у меня нет... у каждого виджета есть своя палитра, я редактировал ее в дизайнере. Берем ассистант и читаем про QPalette, а еще проще прочитать у Шлее (глава 13, страница 264)...