crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Ещё раз про прозрачность виджетов
Gluck
  опции профиля:
сообщение 9.2.2010, 15:48
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 9.2.2010
Пользователь №: 1457

Спасибо сказали: 0 раз(а)




Репутация:   0  


Почитал я тут похожие темы, но ответа как-то не нашёл. Есть ActiveX виджет, к нему child'ом приделан обычный виджет (который рисуется поверх activeX'ного виджета). И очень хочется, чтобы обычный виджет был полупрозрачным (причем целиком. В соседней теме SABROG писал, что "надо разделить понятие полу-прозрачности и частичной полу-прозрачности. Первое не вопрос, второе гемор." Вот тут первая ситуация). Код, например такой:
class TestWidget : public QWidget
{
public:
  TestWidget( QWidget* parent )
    : QWidget( parent,  )
  {
    QHBoxLayout* layout = new QHBoxLayout();
    layout->addWidget( new QPushButton( "qweqwe" ));
    layout->addWidget( new QPushButton( "qwe" ));
    setLayout( layout );
  }
};
// -------
// в конструкторе класса, пронаследованного от QMainWindow
QAxObject* activeXWidget = new QAxObject( this );
// ... тут делается setControl()
QWidget* testWidget = new TestWidget( activeXWidget );
setCentralWidget( activeXWidget );

Как бы такое можно было сделать? Причем, задача-максимум, чтобы можно было этот виджет нарисовать в 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  


Цитата(Elfinit @ 17.2.2010, 16:38) *
попробуй background: none

В смысле setBackgroundRole( QPalette::NoRole ); ? Ничего не меняется.
В документации написано, что прозрачность виджетов должна работать автоматически (из-за двойной буферизации). И она на практике работает, но не поверх ActiveX компонента (т.е., если ActiveX виджет неного сместить, чтобы прозрачный виджет налезал на него не полностью, то видно, что там, где нет activeX'ного виджета, прозрачность есть).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 17.2.2010, 17:02
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

Спасибо сказали: 7 раз(а)




Репутация:   1  


не,
setStyleSheet("backround:none;");


Кстати, несколько похожие глюки были, когда GraphicsView рисовался через QGLWidget. Фон очень уж странно перерисоывался, прозрачность я даже побоялся включать)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Gluck
  опции профиля:
сообщение 18.2.2010, 14:33
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 9.2.2010
Пользователь №: 1457

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Elfinit @ 17.2.2010, 17:02) *
setStyleSheet("backround:none;");

Так тоже не работает...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
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  


Цитата(Rocky @ 18.2.2010, 21:40) *
Когда в 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  


Цитата(Гость_Гость_* @ 24.3.2010, 1:51) *
А может подскажите как сделать прозрачной кнопку, чтобы видна была только иконка?
может проще положить иконку в QLineEdit?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 24.3.2010, 10:35
Сообщение #10


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Не совсем понял, но может тебе нужно вызвать setIcon а затем setFlat? Тогда будет отображаться только иконка.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.12.2024, 19:48