Виджет qt с полностью прозрачным фоном

Мне нужно создать виджет qt, который будет выступать в качестве родителя для некоторых других виджетов и который будет их заказывать.

теперь вопрос в том, как сделать фон полностью прозрачным?

Я думал сделать это так :

struct Imp
{
  Imp( QWidget *parent ) : thisWidget( new QWidget( parent ) )
  {
    thisWidget->setAttribute( Qt::WA_TranslucentBackground, true );
  }

  QWidget *thisWidget;
};

Как вы думаете, мне нужно установить атрибут, или он будет работать нормально без него?

5 ответов


по умолчанию в Qt4 QWidget ничего не будет рисовать для своего фона, и будут нарисованы только его дочерние элементы. Если вы хотите переопределить это, вы должны специально сказать виджету, чтобы нарисовать его фон с помощью одного из его свойств. Обратите внимание, что некоторые виджеты, полученные из QWidget, будут автоматически рисовать фоны.


вы должны быть в состоянии сделать все настройки рисования вам нужно, изменив стиль вашего виджета я думаю

MyWidget {background-color: none;}

должен работать, таблицы стилей могут быть очень легко протестированы в дизайнере


вы можете посмотреть на:

setAttribute( Qt:: WA_NoSystemBackground, true);

и

setAttribute (Qt:: WA_OpaquePaintEvent, false);


решение, которое сработало для меня (я устанавливал прозрачный фон для QTextEditor):

auto editorPalette = editorWidget->palette();
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent);
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent);
editorWidget->setPalette(editorPalette);

Не знаю, полностью ли он решает вашу проблему, но это речь в этой статье

документация находится на http://doc.qt.nokia.com/4.1/qwidget.html#transparency-and-double-buffering

решение для Qt4.1 но должен быть релевантным.