2013-11-22 72 views
2

我不知道爲什麼或如何發生,但Z順序完全搞砸了。這是顯示我的問題的最小例子。測試機器正在Windows 8 x64,Qt 5.1上運行。奇怪的圖像行爲(Qt快速2)

import QtQuick 2.0 

Item { 
id: root; 

width: 800; 
height: 800; 

Background { 
    id: background; 

    anchors.fill: root; 
    imageSource: "backgrounds/1.jpg"; 
} 

MainView { 
    id: mainView; 

    anchors.fill: root; 
} 

BottomBar { 
    id: bottomBar; 

    anchors.bottom: root.bottom; 
    anchors.left: root.left; 
    anchors.right: root.right; 
    height: 75; 
} 

這裏是背景:

import QtQuick 2.0 
import QtGraphicalEffects 1.0 

Item { 
id: root; 

property alias imageSource: imageItem.source; 

Image { 
    id: imageItem; 

    anchors.fill: root; 
    fillMode: Image.PreserveAspectCrop; 
    visible: false; 
} 

GaussianBlur { 
    anchors.fill: root; 
    source: imageItem; 
    radius: 12; 
    samples: 12; 
    deviation: 5; 
    cached: true; 
} 
} 

的MainView:

import QtQuick 2.0 

Item { 
id: root; 

Rectangle { 
    anchors.centerIn: root; 
    width: 500; 
    height: 500; 

    color: "red"; 
} 
} 

而且BottomBar:

import QtQuick 2.0 

Item { 
id: root; 

Rectangle { 
    anchors.fill: root; 
    color: Qt.rgba(.07, .07, .07, .95); 
} 

的應紅色正方形居中在1.JPG的中間以及底部的75px高度線它,但方形是沒有看到。

但是,如果我刪除背景元素,一切都很好。

感謝您的幫助。

回答

0

對不起,但我不能運行它並檢查。但是,實際上,當我閱讀代碼時,一切都看起來不錯。當然,我可以忽略一些東西。

你沒有使用明確的z排序,所以一切都應該清楚地沿着上下。如果你沒有看到矩形,那麼它不應該是Z軸的問題。根本看不到矩形可能是其他bug的結果。如果位置或錨點錯誤計算,則矩形可能以適當的Z結束,但寬度= 0,高度= 0。但是,如果你對它們進行了硬編碼,這是不可能的。

另一件很重要的事情是 - 你沒有說過你在哪裏觀察效果。你看到它在真正的運行應用程序,或在Qt設計器或類似的工具?很多時候我看到QtDesigner 真的搞砸了渲染一個正確書寫和工作的屏幕。請務必檢查實時應用程序的內容。

Btw。你有沒有嘗試檢查他與QtInspector運行佈局?它可能會很快告訴你矩形已經走到哪裏。

編輯:哦 - 還有一件事。以防萬一,試試這個:

MainView { 
    id: mainView; 

    anchors.fill: background; 
} 

BottomBar { 
    id: bottomBar; 

    anchors.bottom: mainView.bottom; 
    anchors.left: mainView.left; 
    anchors.right: mainView.right; 
    height: 75; 
} 

我已經改變了錨點,以便幀被明確地排序。它將根據佈局設置爲根號< - Bkg < - MV < - BBar,而不是讓它們全部平行和獨立。如果佈局有效。如果在這個設置中沒有看到矩形,那麼其他地方就有一些東西被搞砸了。

+0

感謝您的幫助。這並沒有改變,但我解決了這個問題。不透明度有問題。可能是基於[QuickWidget](https://code.google.com/p/quickwidget/)用於QQuickWindow支持不透明度(透明背景)的封裝器中的一個錯誤。解決方法是將不透明度設置爲0.99,如果你想要不透明的項目 – Sh1ne

+0

嗯..實際上,我記得閱讀了一些與不透明度有關的bug,通過0.99技巧解決了這個問題,導致所有內容都是「alpha混合」而不是「沿Z順序覆蓋」 。但我不認爲這是事實。 IIRC,當你實際上有透明的東西時,這個錯誤就會顯示出來,而你的佈局看起來似乎不是(hm,可見的:在imageItem上是false,也許?)。無論如何,很高興聽到你找到它。請寫一個簡短的答案,並在幾天後接受它作爲解決方案(我的意思是,你自己的答案),它會將線程標記爲「已解決」。 – quetzalcoatl

+0

我有很多元素透明,我也有可見的設置爲圖像上的錯誤,因爲我使用了GaussianBlur。但事實並非如此。即使我把它設置爲假,一切都會變得模糊起來。 – Sh1ne