C++ 奇怪的图像行为(Qt Quick 2)

C++ 奇怪的图像行为(Qt Quick 2),c++,image,qt,qml,z-order,C++,Image,Qt,Qml,Z Order,我不知道这是为什么或者如何发生的,但是Z顺序完全混乱了。这里有一个最简单的例子来说明我的问题。测试机在Windows 8 x64、Qt 5.1上运行 import QtQuick 2.0 Item { id: root; width: 800; height: 800; Background { id: background; anchors.fill: root; imageSource: "backgrounds/1.jpg"; } MainView {

我不知道这是为什么或者如何发生的,但是Z顺序完全混乱了。这里有一个最简单的例子来说明我的问题。测试机在Windows 8 x64、Qt 5.1上运行

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;
}
}
主视图:

import QtQuick 2.0

Item {
id: root;

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

    color: "red";
}
}
和底部栏:

import QtQuick 2.0

Item {
id: root;

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

红场应位于1.JPG的中部,底部为75 px的高度线,但不可见正方形。</P> 但如果我删除背景元素,一切都很好


提前感谢您的帮助。

对不起,我无法运行它并进行检查。但是,事实上,当我阅读代码时,一切看起来都很好。我当然可以忽略一些事情

您没有使用显式的z排序,因此所有内容都应该沿着上下方向进行。如果看不到矩形,那么它不应该是Z轴的问题。根本看不到矩形可能是其他错误的结果。如果位置或锚定计算错误,则yout矩形可能以正确的Z结束,但宽度=0,高度=0。但是,由于您对它们进行了硬编码,这是不可能的

另一件非常重要的事情是——你没有说你在哪里观察到效果。你在真正的running应用程序、Qt Designer或类似工具中看到了吗?很多时候,我都看到QtDesigner真的把正确书写和工作屏幕的渲染搞砸了。确保检查实时应用程序显示的内容

顺便问一下,你有没有试过用QtInspector检查运行布局?它可能会很快显示矩形的位置

编辑:哦,还有一件事。以防万一,请尝试以下方法:

MainView {
    id: mainView;

    anchors.fill: background;
}

BottomBar {
    id: bottomBar;

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

我已经更改了锚定,以便对帧进行明确的排序。它将布局依赖项设置为root,感谢您的帮助。这没有改变任何事情,但我解决了问题。不透明度有问题。可能是基于QQuickWindow的包装中的一个bug,它支持不透明性(透明背景)。如果需要不透明项HM,解决方案是将“不透明度”设置为0.99。。事实上,我记得读过一些关于0.99技巧解决的不透明度的错误,这导致所有东西都是“alpha混合”的,而不是“沿Z顺序覆盖”。但我认为情况并非如此。IIRC,当你有一些透明的东西时,这个bug就会出现,而你的布局看起来并没有(嗯,可见:可能在imageItem中为false?)。不管怎样,很高兴听到你找到了它。请写一个简短的答案,并在几天后接受它作为解决方案(我的意思是,你自己的答案),它会将线程标记为“已解决”。我有许多元素是透明的,我也有可视设置为假的图像上,因为我用高斯蓝。但事实并非如此。即使我把它设为false,一切都搞砸了。