Название: Как сделать прозрачную кнопку? Отправлено: Nikita от Июля 30, 2005, 15:46 Спасите, помогите!
Уже довольно много времени потратил на попытку создания custom кнопки. Проблема в том что никак не получается сделать её прозрачной. Надо чтобы на ней была только иконка и текст, а сквозь остальную область просвечивал фон... (кнопку наследовал от QWidget) Попытки сделать setAttribute(Qt::WA_NoBackground,true); или setAttribute(Qt::WA_NoSystemBackground,true); приводят к тому что там где должен просевчивать фон, просвечивает бурда из видеопамяти... Так как же сделать такую кнопку не прибегая к setMask() и не задавая сложную область? Пытался при этом отключать двойную буфферизацию setAttribute(Qt::WA_PaintOnScreen,true); - не помогает... Ведь в Виндах же можно сделать кнопку flat стиля, которая будет прозрачна... Как это возможно в Qt? Название: Как сделать прозрачную кнопку? Отправлено: Racheengel от Августа 01, 2005, 13:26 если под кнопкой фон будет статичным, копай в сторону copyBlt...
Название: Как сделать прозрачную кнопку? Отправлено: Racheengel от Августа 01, 2005, 13:35 если под кнопкой фон будет статичным, копай в сторону copyBlt...
Название: Re: Как сделать прозрачную кнопку? Отправлено: Zmey от Августа 02, 2005, 11:43 Цитата: "Nikita" Спасите, помогите! Уже довольно много времени потратил на попытку создания custom кнопки. Проблема в том что никак не получается сделать её прозрачной. Надо чтобы на ней была только иконка и текст, а сквозь остальную область просвечивал фон... (кнопку наследовал от QWidget) Попытки сделать setAttribute(Qt::WA_NoBackground,true); или setAttribute(Qt::WA_NoSystemBackground,true); приводят к тому что там где должен просевчивать фон, просвечивает бурда из видеопамяти... Так как же сделать такую кнопку не прибегая к setMask() и не задавая сложную область? Пытался при этом отключать двойную буфферизацию setAttribute(Qt::WA_PaintOnScreen,true); - не помогает... Ведь в Виндах же можно сделать кнопку flat стиля, которая будет прозрачна... Как это возможно в Qt? А иконка у тебя прозрачная? Или я чего-то не понимаю... Название: Re: Как сделать прозрачную кнопку? Отправлено: jindos от Августа 02, 2005, 12:30 Цитата: "Zmey" А иконка у тебя прозрачная? Или я чего-то не понимаю... Иконка - это не рисунок на всю кнопку. Она может быть достаточно маленькой... Насколько я понимаю, имеется ввиду именно такая иконка, которая при помощи setIconSet(QIconSet &icon) в дополнение к тексту ставится, а не изображение, которое при помощи setPixmap на кнопку рисуется вместо всего что на ней было (если было) ранее... Вообще... Насколько я знаю, Qt плохо поддерживает прозрачность... Можно копнуть в сторону флагов QRasterOp... Например использовать для рисования флаг XorROP предварительно инвертнув фон... Название: Как сделать прозрачную кнопку? Отправлено: piton от Августа 03, 2005, 14:30 ну вот я делал кнопку из картинки .bmp, с голубым фоном. фон не был виден...
Код:
а если в картинке есть прозрачный фон то еще проще делается Код:
Название: Как сделать прозрачную кнопку? Отправлено: piton от Августа 03, 2005, 14:33 упс...тебе зачем-то не нужно setMask -((
тогда не знаю... Название: Как сделать прозрачную кнопку? Отправлено: Nikita от Августа 12, 2005, 19:21 Я поясню, почему мне не хочется пользоваться setMask... Дело в том что мне надо максимально быстрый интерфейс, который сможет пахать даже на относительно старых компах типа 486 и P-I.
setMask же - это некий аналог виндовых регионов (или наоборот :-). У элементов интерфейса, которые используют регионы гораздо больше производится арифметики при всевозможных событиях, например, когда такому control-у приходит MouseClick, он делает проверку на попадание точки в полигональную область (или проверку на попадание в какую-либо из подобластей, или ещё черта в ступе). Попробуйте написать две программки, у первой кнопки туллбара будут стандартными прямоугольниками а у второй - сложными областями. Когда напишете, повозите мышкой над этими кнопками и замерьте загрузку процессора. Поверьте, у прямоугольников загрузка будет на порядок меньше... А в моей проге дело не ограничивается одним тулбаром и потому мне хотелось бы иметь способ без SetMask... Вы не представляете сколькими способами я пытался решить проблему прозрачной кнопки, но в итоге ничего не получилось и в своих рукописных компонентах я написал кнопку, которая просто забирает у parent-a кусок области и использует в качестве своего задника... Название: Как сделать прозрачную кнопку? Отправлено: HECTEPOB от Ноября 01, 2005, 17:51 Была мысль скрывать контрол, ставить на отрисовывающий пайнтер флаг АНКЛИППЕД включать МаусТрекинг и рисовать контрол прямо на родителе.
Название: Как сделать прозрачную кнопку? Отправлено: KiberSasha от Ноября 16, 2005, 21:57 You can try QWidget::SetBackgroundMode(Qt::NoBackground);
|