Ещё раз про прозрачность виджетов |
Здравствуйте, гость ( Вход | Регистрация )
Ещё раз про прозрачность виджетов |
Gluck |
9.2.2010, 15:48
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 9.2.2010 Пользователь №: 1457 Спасибо сказали: 0 раз(а) Репутация: 0 |
Почитал я тут похожие темы, но ответа как-то не нашёл. Есть ActiveX виджет, к нему child'ом приделан обычный виджет (который рисуется поверх activeX'ного виджета). И очень хочется, чтобы обычный виджет был полупрозрачным (причем целиком. В соседней теме SABROG писал, что "надо разделить понятие полу-прозрачности и частичной полу-прозрачности. Первое не вопрос, второе гемор." Вот тут первая ситуация). Код, например такой:
Как бы такое можно было сделать? Причем, задача-максимум, чтобы можно было этот виджет нарисовать в Qt Designer'e и потом просто динамически подгрузить. ( Я пытался в нём определять styleSheet как "background-color: rgba(0, 255, 0, 30)", но результаты оказались очень странными). P.S.: Qt 4.6.0 |
|
|
Elfinit |
17.2.2010, 16:38
Сообщение
#2
|
Участник Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: 1 |
Ради эксперимента попробуй background: none
|
|
|
Gluck |
17.2.2010, 16:51
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 9.2.2010 Пользователь №: 1457 Спасибо сказали: 0 раз(а) Репутация: 0 |
попробуй background: none В смысле setBackgroundRole( QPalette::NoRole ); ? Ничего не меняется. В документации написано, что прозрачность виджетов должна работать автоматически (из-за двойной буферизации). И она на практике работает, но не поверх ActiveX компонента (т.е., если ActiveX виджет неного сместить, чтобы прозрачный виджет налезал на него не полностью, то видно, что там, где нет activeX'ного виджета, прозрачность есть). |
|
|
Elfinit |
17.2.2010, 17:02
Сообщение
#4
|
Участник Группа: Участник Сообщений: 127 Регистрация: 17.3.2009 Из: Казань Пользователь №: 619 Спасибо сказали: 7 раз(а) Репутация: 1 |
не,
Кстати, несколько похожие глюки были, когда GraphicsView рисовался через QGLWidget. Фон очень уж странно перерисоывался, прозрачность я даже побоялся включать) |
|
|
Gluck |
18.2.2010, 14:33
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 9.2.2010 Пользователь №: 1457 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Rocky |
18.2.2010, 21:40
Сообщение
#6
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Я вот щас как-то добился эффекта полной прозрачности дочернего виджета так. Переопределил обработчик paintEvent в классе, производном от этого виджета. Изначально виджету ставился styleSheet с градиентной заливкой фона с прозрачностью. Когда в paintEvent стоял вызов Qpainter::eraseRect(...), тот фон, который задавал StyleSheet рисовался нормально. А когда я попробовал убрать вызов eraseRect, виджет вообще как-будто исчез. Т.е. я могу на нем рисовать, и это все видно. Но сам он полностью прозрачный. Правда ActiveX-виджетов я не использую.
|
|
|
Gluck |
19.2.2010, 12:46
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 9.2.2010 Пользователь №: 1457 Спасибо сказали: 0 раз(а) Репутация: 0 |
Когда в paintEvent стоял вызов Qpainter::eraseRect(...) Попробовал вставить туда eraseRect. В результате оно закрасило виджет (который должен быть прозрачным) уветом фона (сереньким непрозрачным), и поверх уже с прозрачностью нарисовалось то, что надо. Но всё-таки нужно, чтобы под виджетом просвечивал activeX'ный виджет... |
|
|
Гость_Гость_* |
23.3.2010, 22:51
Сообщение
#8
|
Гости |
А может подскажите как сделать прозрачной кнопку, чтобы видна была только иконка?
|
|
|
Litkevich Yuriy |
23.3.2010, 23:16
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
molchanoviv |
24.3.2010, 10:35
Сообщение
#10
|
Старейший участник Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: 5 |
Не совсем понял, но может тебе нужно вызвать setIcon а затем setFlat? Тогда будет отображаться только иконка.
|
|
|
Текстовая версия | Сейчас: 30.12.2024, 19:48 |