Qt виджет с полностью прозрачным фоном - PullRequest
8 голосов
/ 25 ноября 2010

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

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

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

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

  QWidget *thisWidget;
};

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

Ответы [ 5 ]

3 голосов
/ 02 декабря 2010

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

2 голосов
/ 27 ноября 2010

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

MyWidget {background-color: none;}

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

0 голосов
/ 24 апреля 2017

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

auto editorPalette = editorWidget->palette();
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent);
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent);
editorWidget->setPalette(editorPalette);
0 голосов
/ 12 апреля 2017

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

setAttribute( Qt::WA_NoSystemBackground, true );

и

setAttribute( Qt::WA_OpaquePaintEvent, false );
0 голосов
/ 25 ноября 2010

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

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

Решение для Qt4.1, но должно быть подходящим.

...