C++ 奇怪的图像行为(Qt Quick 2)
我不知道这是为什么或者如何发生的,但是Z顺序完全混乱了。这里有一个最简单的例子来说明我的问题。测试机在Windows 8 x64、Qt 5.1上运行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 {
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,一切都搞砸了。