Qt를 이용하여 배경이 투명한 다이얼로그를 만들기
글쓴이: klara / 작성시간: 화, 2007/04/10 - 10:53오전
배경만 투명하고 그위의 라벨등은 그대로 표시되게 하고 싶습니다.
첨부파일(어디선가 주워왔습니다-_-;)을 보시면 어떤 모습인지 알수 있으실것이라고 생각합니다.
반투명한 다이얼로그를 만들되, 그위의 글자는 불투명한그대로 유지하는게 목표인데, 이를 위해서, 반투명한 배경과, 배경이 투명하고 글자밖에 없는 다이얼로그를 만들어서, 그 둘을 겹쳐 보여줄려고 하는데, 반투명은 함수하나로 간단하게 되는데, 배경만 투명하게 만드는건 어떻게 해야되는지 모르겠네요...
혹시 어떻게 하면 좋을지 아시는분 계시면 알려주시면 감사하겠습니다.
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 23.44 KB |
Forums:
위젯에 따라
위젯에 따라 알파값을 조정하면 됩니다.
그러니까 부모위젯은 알파값을 50정도로 반쯤 줘서 반투명하게 하고 그 위에 부모(parent)는 정해지지 않은 다른 위젯을 pos 를 조정해서 위치시키면 됩니다.
---
http://www.emgui.or.kr
임베디드 GUI의 세계로 오세요~
답변감사합니다.
답변감사합니다.
죄송하지만, 그 "위젯에 따라 알파값을 조정"하는 방법을 몰라서 고생중인지라; 그 방법을 알려주시면 안될까요...?
위의 사이트로
위의 사이트로 오셔서 질문해주시면 예제 코드까지 상세히 알려드리겠습니다. ㅋㅋ
감사합니다. 질문
감사합니다. 질문 올려놓았습니다.
QWidget::setMask()로
QWidget::setMask()로 위젯에 마스크를 씌워서 표시 영역을 설정해줄 수 있습니다. 다만 마스크는 1 비트라 알파블렌딩이 불가능하며, 위에 위젯이 정상적으로 표시되지 않을 수도 있습니다.
X11에서 beryl이나 xcompmgr 같은 컴포지팅 매니저를 사용하고 있는 환경이라면 ARGB 창 모드가 해답이 될 수 있을 것 같습니다.
----
http://www.planetmono.org
----
http://www.planetmono.org
답변 달아주셔서
답변 달아주셔서 감사합니다.
setMask는 잘라내는 것인데, 전 글씨만 보이는 다이얼로그를 만들려고 하는 것이기때문에 힘들듯하네요...
글씨모양에 따라 잘라낼수 있다면 상관없겠지만, 이것도 또 어찌할지 감이 안잡힐뿐만 아니라 부하도 꽤 심할듯하네요-_-;;
환경이 win32라 x11용 라이브러리는 사용할수가 없네요..
구글링.
구글에서 "widget qt alpha" 로 검색 해 보니
아래 링크가 바로 나오는군요
http://doc.trolltech.com/qq/qq16-background.html
귀찮아서 :) 살짝만 읽어봤지만
이 글귀가 보이네요.
Qt 4.0 supports this through its Qt::WA_ContentsPropagated widget attribute. In Qt 3, there are several ways to simulate this feature:
....
You can set a transparency mask (QWidget::setMask()). The parent widget is aware of the child widget's mask and will paint all areas not covered by the mask
....
Although Qt 3 doesn't support semi-transparency for widgets, we can simulate it using QImage if necessary.
위에 분이 말씀하신 setMask는 Qt 3에서 가능하다는 serveral ways중 하나군요.
그리고 보시면 아시겠지만
QWidget의 transparency에 관한 글이라서
스샷에 나와있는것 처럼 QWidget의 하위 클래스 모두 버튼이든 창이든
원하시는것처럼 투명이 가능하겠네요.
http://doc.trolltech.com/4.1/qwidget.html#transparency-and-double-buffering
위에껏두..
답글
답글 감사합니다.
사실 구글이나 야후등에서 3일째 검색만 하다가 해결이 안되서 올린 질문입니다.
그내용도 읽어보았고, 기타 포럼글도 여럿 읽어봤는데도 해결책이 안보이더라구요...
저는 Qt4.2.3버전을 이용하고 있는데, Qt::WA_ContentsPropagated는 4.1아래의 버전에서만 적용되는 값이어서 해당사항이 없습니다.
Qt::WA_ContentsPropagated
This flag is superfluous and obsolete; it no longer has any effect. Since Qt 4.1, all widgets that do not set WA_PaintOnScreen propagate their contents.
두번째 링크역시 이미 읽어보았지만... autoFillBackground을 이용하는 것이나 Qt::WA_OpaquePaintEvent 은 모두 배경을 채워버리는 것이기 때문에, 마찬가지로 제가 원하는 것이 아닙니다.
게다가, 제가 영어가 짧아서 잘못 해석한 탓인지는 모르겠지만, setOpacity로 부모 다이얼로그의 투명도를조절하면, autoFillBackground로 채워지는 배경이나, Qt::WA_OpaquePaintEvent 옵션으로 아무것도 그려지지 않고 까맣게 나오는 배경조차도 그 투명도가 적용된상태로 표시되더군요...
손수검색까지 해서 답변해주셔서 감사합니다.
댓글 달기