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

时间:2013-11-22 15:59:04

标签: 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 {
    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高度线,但是看不到方形。

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

提前感谢您的帮助。

1 个答案:

答案 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,而不是让它们全部并行且独立。如果布局有效。如果在这个设置中没有看到矩形,那么其他地方就会出现一些问题。