crossplatform.ru

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

> Ещё раз про прозрачность виджетов
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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 18.2.2010, 21:40
Сообщение #2


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

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Я вот щас как-то добился эффекта полной прозрачности дочернего виджета так. Переопределил обработчик paintEvent в классе, производном от этого виджета. Изначально виджету ставился styleSheet с градиентной заливкой фона с прозрачностью. Когда в paintEvent стоял вызов Qpainter::eraseRect(...), тот фон, который задавал StyleSheet рисовался нормально. А когда я попробовал убрать вызов eraseRect, виджет вообще как-будто исчез. Т.е. я могу на нем рисовать, и это все видно. Но сам он полностью прозрачный. Правда ActiveX-виджетов я не использую.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




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