2011-10-27 5 views
5

풍선 도움말을 에뮬레이션하는 맞춤 위젯이 있습니다. 제대로 표시 되려면 위젯이 QWidget 속성 Qt::WA_TranslucentBackground에 의존해야합니다. 내 응용 프로그램은 모든 주요 플랫폼 (Windows XP, Windows 7, Linux, Mac)에서 작동해야하므로 조금 걱정됩니다.이 특성은 모든 주요 플랫폼에서 사용할 수 있습니까? 그렇지 않은 경우 쿼리 할 수 ​​있습니까? testAttribute()은 그렇게하지 않습니다. 속성을 설정했는지 여부가 아니라 속성이 설정되었는지 여부를 반환합니다.Qt :: WA_TranslucentBackground는 어디서나 사용할 수 있습니까?

답변

6

이것은 ARGB를 지원하지 않도록 구성된 경우 X11 이상의 Linux에서만 작동합니다. QWidget 문서를 참조하십시오 :

Qt는 4.5 이후 반투명 윈도우

만들기, 합성을 지원하는 윈도우 시스템에서 반투명 지역에 창을 만들 수있다.

최상위 위젯에서이 기능을 사용하려면 설정된 Qt는 :: WA_TranslucentBackground의 setAttribute (와 속성)과 그 배경이 당신이 부분적으로 투명하게 할 지역에 불투명 색상으로 색칠되어 을 확인 .

플랫폼 노트 :

X11 :이 기능은 ARGB의 영상과 합성 창 관리자를 지원하는 X 서버의 사용에 의존한다.

Windows : 반투명이 작동하도록 위젯에 Qt :: FramelessWindowHint 창 플래그가 설정되어 있어야합니다.

"투명도 및 이중 버퍼링"이라는 단락을 읽는 것도 재미 있을지도 모릅니다.

+0

현재 Linux가 ARGB를 지원하지 않는 경우가 얼마나 흔하거나 드뭅니까? 어떻게 든 쿼리 할 수 ​​있습니까? –

+0

최근 하드웨어/배포판에서 문제가 발생할 것이라고 생각하지 않습니다. 어쨌든 xdpyinfo를 사용하거나 xorg.conf 구성 파일을보고 정보를 얻어야합니다. 아마도 임베디드 리눅스 시스템에 문제가있을 수 있습니다. 이것은 더 많은 것을 제공합니다 : http://stackoverflow.com/questions/2434511/what-pixel-format-does-x-server-use. –

7

Linux의 경우는 합성의 사용 여부를 확인해야합니다 :

bool QX11Info::isCompositingManagerRunning() [static] 

예를 들어,

#ifdef Q_WS_X11 
    if(QX11Info::isCompositingManagerRunning()) 
     setAttribute(Qt::WA_TranslucentBackground); 
#endif 

이 질문은 오래된 내용이지만 누군가에게 도움이 될 수 있습니다.

+1

그리고 Google에서 방황하는 사람은 둥근 OSD 나 말풍선 팝업처럼 무작위 데스크톱을 지원해야하는 경우 Qt [ShapedClock] (https://doc.qt.io/ qt-5/qtwidgets-widgets-shapedclock-example.html) 예제는'setMask'를 사용하여 합성하지 않고 비 사각형 윈도우를 만드는 법을 보여줍니다. – ssokolow

+0

때때로'Qt :: WA_TranslucentBackground'가'setMask'없이 리눅스에서 동작하도록하기 위해 몇가지 속성과 윈도우 플래그를 활성화시켜야합니다. https://stackoverflow.com/a/30596357/999943 – phyatt

관련 문제