2010-11-25 4 views
8

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

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

Я думал сделать это следующим образом:

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

    QWidget *thisWidget; 
}; 

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

+0

ли вам действительно нужно _transparent_ фона, или достаточно, чтобы иметь _no_ фона? Это реальная разница: с прозрачным фоном ОС скажет окну _underlying_ рисовать пиксели. Без фона ОС просто ожидает, что дети будут рисовать все окно. – MSalters 2010-11-25 16:22:38

+0

@MSalters Этот виджет - это места в окне, и только дочерние виджеты этих виджетов должны быть видимыми. Все, что стоит за этим виджетами (если не охвачено дочерним виджетами), должно быть видно. – 2010-11-25 16:28:10

+0

Я не уверен, что понимаю этот вопрос ... по умолчанию в Qt4 QWidget ничего не рисует для своего собственного фона, и будут рисоваться только его дети. – 2010-12-01 22:21:11

ответ

3

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

2

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

MyWidget {background-color: none;}

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

0

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

SetAttribute (Qt :: WA_NoSystemBackground, правда);

и

SetAttribute (Qt :: WA_OpaquePaintEvent, ложь);

0

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

auto editorPalette = editorWidget->palette(); 
editorPalette.setColor(QPalette::Active, QPalette::Base, Qt::transparent); 
editorPalette.setColor(QPalette::Inactive, QPalette::Base, Qt::transparent); 
editorWidget->setPalette(editorPalette); 
Смежные вопросы