2013-11-22 26 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