Виджет 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 но должен быть релевантным.