我不知道为什么或如何发生,但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;
}
}
的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 :(得分:0)
抱歉,我无法运行并检查。但是,实际上,当我阅读代码时,一切看起来都很好。当然我可能忽视了一些事情。
你没有使用明确的z排序,所以一切都应该明显地位于上下。如果你没有看到矩形,那么它不应该是Z轴的问题。根本没有看到矩形可能是其他bug的结果。如果位置或锚点计算错误,那么矩形可能已经以适当的Z结束,但Width = 0,Height = 0。但是,正如你将它们硬编码一样,这是不可能的。
另一个非常重要的事情是 - 你还没有说过在哪里观察到这种效果。您是在真实运行的应用程序中,还是在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< - Bkg< - MV< - BBar,而不是让它们全部并行且独立。如果布局有效。如果在这个设置中没有看到矩形,那么其他地方就会出现一些问题。