2010-11-25 31 views
8

다른 위젯의 부모 역할을하며 순서를 지정할 qt 위젯을 만들어야합니다.완전히 투명 한 배경을 가진 qt 위젯

자, 어떻게하면 배경이 투명하게 보이게 할 수 있습니까?

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

    QWidget *thisWidget; 
}; 

은 내가 속성을 설정할 필요가 있다고 생각하십니까, 아니면없이 잘 작동하는 것입니다 :

나는 이런 식으로 할 생각? 완전히 문제가 해결되는지

+0

당신이 정말 _transparent_ 배경 필요하십니까, 아니면 _no_ 배경이 충분하다? 이것은 실제적인 차이입니다 : 투명한 배경을 가진 OS는 _underlying_ 창에 픽셀을 칠하도록 지시합니다. 백그라운드가 없으면 OS는 아이들이 전체 창을 그릴 것이라고 기대합니다. – MSalters

+0

@MSalters이 위젯은 창에있는 장소이며,이 위젯의 ​​하위 위젯 만 표시되어야합니다. 이 위젯 뒤에있는 것이 무엇이든간에 (어린이 위젯에 의해 커버되지 않는 경우)보아야합니다. –

+0

이 질문을 이해할 수 있을지 모르겠다 ... Qt4에서 기본적으로 QWidget은 자체 배경에 대해 아무 것도 그리지 않고 그 자식 만 그려 질 것이다. –

답변

3

기본적으로 Qt4에서 QWidget은 자신의 배경에 대해 아무 것도 그리지 않을 것이고 자식 만 그려 질 것입니다. 이를 오버라이드하려면 위젯이 속성 중 하나를 통해 배경을 그리도록 지정해야합니다. QWidget에서 파생 된 일부 위젯은 자동으로 배경을 그립니다.

+0

이전에 설정된 배경 ('backgroundRole')을 해제하려는 경우 어떻게합니까? –

+0

@ TomášZato : 이전 설정을 쿼리하고 기억하고이를 사용하여 복원하는 가장 쉬운 방법입니다. 가장 어려운 방법 중 하나는 부모의 위젯을 쿼리하고 부모의 배경 역할을 얻은 다음 위젯에서 설정하는 것입니다. 팔레트의 나머지 부분을 그대로 두어야 할 경우이 모든 작업이 복잡합니다. –

2

당신은 스타일 시트는 아주 쉽게 디자이너에서 테스트 할 수 있습니다, 내가

MyWidget {background-color: none;}

작동해야한다고 생각 위젯의 스타일을 변경하여 필요한 모든 그리기 사용자 정의를 할 수 있어야

+0

QLineEdit에서 그렇게하면 배경이 투명에서 흰색으로 바뀝니다. (필자는 PyQt를 사용합니다.) 심지어 원하지 않는 것입니다. 재미 있은 효과. 그러나 qss를 사용하면 대부분의 경우 매우 편안하다는 데 동의합니다. – Trilarion

0

당신이보고 싶을 수 있습니다

의 setAttribute (Qt는 :: WA_NoSystemBackground, TRUE);

의 setAttribute (Qt는 :: WA_OpaquePaintEvent, 거짓);

0

나를 위해 일한 솔루션 (I가 QTextEditor에 대한 투명한 배경을 설정했다) :

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