2017-01-17 2 views
0

QQuickWidget 배경을 투명하게 만드는 데 문제가 있습니다.중단 스태킹 순서없이 QQuickWidget 배경을 투명하게 만들 수 없습니다.

QWidget 아래에 QQuickWidget을 입력하고 싶습니다. QQuickWidget은 소스 qml 파일을 사용합니다. Qt 4.8에서 작업 할 때 QDeclarativeView을 사용했습니다. Qt 4에서 Qt 5로 이식하면 QDeclarativeView은 더 이상 사용되지 않습니다. 다음과 같이 따라서, 나는 대신 QDeclarativeViewQQuickWidget을 사용하고 있습니다 :

QWidget *mainWidget = new QWidget(); 
mainWidget->setStyleSheet("background-image: url(:/background.png);"); 

QQuickWidget *quick = new QQuickWidget(mainWidget); 
quick->setAttribute(Qt::WA_TranslucentBackground, true); 
quick->setAttribute(Qt::WA_AlwaysStackOnTop, true); 
quick->setClearColor(Qt::transparent); 
quick->setSource(QUrl("qrc:/image.qml")); 

QWidget *topWidget = new QWidget(mainWidget); 
topWidget->setStyleSheet("background-image: url(:/semitransparent.png);"); 

내가 할 경우 :

setAttribute(Qt::WA_AlwaysStackOnTop, true); 

은 배경이 투명하게하지만, 내부의 QQuickWidget 아래에 다른 위젯을 포함하는 스택 순서를 나누기

같은 창문.

QWidget 아래에있을 때 QQuickWidget을 투명하게 만들고 싶습니다. 이것이 가능한가? 그렇지 않은 경우 어떤 해결 방법을 제안합니까?

enter image description here

(2)이 QQuickWidget의 배경입니다 :

(1)이 mainWidget의 배경 이미지입니다. QML 파일이 이미지를 사용 :

enter image description here

(3)이 topWidget의 배경 이미지입니다 :

enter image description here

(4) 내가 원하는 무엇 :

enter image description here

(5) WA_AlwaysStackOnTopfalse로 설정하면 어떻게됩니까? :

enter image description here

(6) 내가 WA_AlwaysStackOnTop 사실 로 내가 설정하면 무엇을 얻을 : 스택 순서의 위반시되어야 함을 말한다

여기 enter image description here

+0

왜 당신이 아래쪽에 있기 때문에 QQuickWidget이 투명인지 아닌지 걱정합니까? 부분적으로 만 보일 수 있습니까? 그리고 부분적으로 보이는 부분조차도 전혀 보이지 않도록하고 싶습니까? – Sabuncu

+0

귀하의 질문을 편집했으나이 부분을 검토하십시오 : "동일한 창 내부의 QQuickWidget 아래에 다른 위젯이 관련되어 있습니다." 원래 문장에는 동사 ("fiil")가 없었으므로 문맥에 따라 의미를 추정했습니다. – Sabuncu

+0

WA_AlwaysStackOnTop이 사용될 때 문제를 보여주는 스크린 샷을 제공하는 것이 도움이 될 것입니다. imgur 화면 캡처에 대한 링크를 제공하고 질문의 본문에 넣을 것입니다. – Sabuncu

답변

0

공식 QT 문서 http://doc.qt.io/qt-5/qquickwidget.html 예상 :

꼭 필요한 경우 QuchickWidget의 Qt :: WA_AlwaysStackOnTop 특성을 설정하면이 제한을 극복 할 수 있습니다. 그러나이 경우 스태킹 순서가 잘못됩니다. 예를 들어 은 QQuickWidget 위에 다른 위젯을 가질 수 없기 때문에 은 반투명 QQuickWidget 아래에 다른 위젯이 표시되어야하는 상황에서만 사용해야합니다..당신이보고있는 것은 버그가 아니라 : http://blog.qt.io/blog/2014/07/02/qt-weekly-16-qquickwidget/

이 최근 블로그 항목 QT 5.1의 새로운 기능입니다 : http://www.ics.com/blog/combining-qt-widgets-and-qml-qwidgetcreatewindowcontainer

결론

또한이 공식 블로그 항목을 참조하십시오 QT 프레임 워크의 알려진, 인식 된 광고 제한

제 조언 :이 문제를 해킹으로 해결하지 말고 UI 접근법을 다시 디자인하십시오. 예를 들어 topWidget 알파 블렌드 (반투명)를 만들 수 있습니다. 예를 들어, 다음과 같습니다 :

편집

enter image description here

+0

qt 또는 편집 된 이미지입니까? –

+0

편집 된 이미지입니다. – Sabuncu