Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ещё раз про прозрачность виджетов
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Gluck
Почитал я тут похожие темы, но ответа как-то не нашёл. Есть 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
Ради эксперимента попробуй background: none
Gluck
Цитата(Elfinit @ 17.2.2010, 16:38) *
попробуй background: none

В смысле setBackgroundRole( QPalette::NoRole ); ? Ничего не меняется.
В документации написано, что прозрачность виджетов должна работать автоматически (из-за двойной буферизации). И она на практике работает, но не поверх ActiveX компонента (т.е., если ActiveX виджет неного сместить, чтобы прозрачный виджет налезал на него не полностью, то видно, что там, где нет activeX'ного виджета, прозрачность есть).
Elfinit
не,
setStyleSheet("backround:none;");


Кстати, несколько похожие глюки были, когда GraphicsView рисовался через QGLWidget. Фон очень уж странно перерисоывался, прозрачность я даже побоялся включать)
Gluck
Цитата(Elfinit @ 17.2.2010, 17:02) *
setStyleSheet("backround:none;");

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

Попробовал вставить туда eraseRect. В результате оно закрасило виджет (который должен быть прозрачным) уветом фона (сереньким непрозрачным), и поверх уже с прозрачностью нарисовалось то, что надо. Но всё-таки нужно, чтобы под виджетом просвечивал activeX'ный виджет...
Гость
А может подскажите как сделать прозрачной кнопку, чтобы видна была только иконка?
Litkevich Yuriy
Цитата(Гость_Гость_* @ 24.3.2010, 1:51) *
А может подскажите как сделать прозрачной кнопку, чтобы видна была только иконка?
может проще положить иконку в QLineEdit?
molchanoviv
Не совсем понял, но может тебе нужно вызвать setIcon а затем setFlat? Тогда будет отображаться только иконка.
kwisp
Gluck,
Цитата(Gluck @ 19.2.2010, 12:46) *
Но всё-таки нужно, чтобы под виджетом просвечивал activeX'ный виджет...

по-моему это не возможно.
точно так же ка невозмоно сделать полупрозрачность поверх идущего видео.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.