2011-08-09 5 views
3

아래의 백그라운드를 볼 수 있도록 내 QListView의 백그라운드를 제거하고 싶습니다. 어떻게해야합니까?QListView 백그라운드를 제거하십시오.

나는 setAttribute(Qt::WA_NoSystemBackground)setAttribute(Qt::WA_NoBackground)을 시도했지만 아무런 변화가 없었습니다. 또한 paintEvent()을 무시할 수 없습니다. 항목을 그리지 않습니다.

아이디어가 있으십니까?

답변

6

QListView의 기본 클래스 인 QScrollArea에는 Viewport라고하는 "다른"위젯이 있다는 것을 잊지 마십시오. viewport() 메소드를 통해 액세스 할 수 있습니다.

당신은 단순히 호출 할 수 투명성을 달성하기

viewport()->setAutoFillBackground(false);

및 기타 설정 (즉, 부모 위젯 설정)에 따라 당신은 배경을 볼 수 있습니다.

1

답변은 사용자의 QListView이 최상위 위젯인지 여부에 따라 다릅니다. QWidget docs on transparency에 대해 자세히 설명합니다.

최상위 아니다 위젯에 대한
view->setWindowOpacity(50); 

, 당신은 알파 채널 하나에 배경을 설정하려면 : 같은 최상위 위젯의 경우, 간단하게 할 수있다

QPalette palette = view->palette(); 
palette.setColor(QPalette::Background, Qt::transparent); 
view->setPalette(palette); 

당신 또한 스타일 시트와 같은 일을 할 수 있어야한다 :

view->setStyleSheet("background-color: transparent;"); 

당신은 위젯이 백그라운드에서 자동으로 기입하지 않도록 false로 autoFillBackground을 설정해야 할 수도 있습니다.

+0

이 모든 제안에 대해 감사 드리며, 모두 시도해 보았습니다. 그래서'setAttribute (Qt :: WA_NoSystemBackground)','setAttribute (Qt :: WA_NoBackground)','view-> setPalette (팔레트)','setAutoFillBackground (false)','view-> setStyleSheet ("background-color : transparent;")'작동했습니다! –

관련 문제