Я понятия не имею, почему или как это происходит, но 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 внизу, однако квадрат не виден.
Но если я удаляю фоновый элемент, все в порядке.
Спасибо за помощь заранее.
Извините, но я не могу запустить его и проверить. Но, действительно, когда я читаю код, все выглядит хорошо. Конечно, я мог что-то упустить.
Вы не используете явное z-упорядочение, поэтому все должно быть прямо вдоль верха-низа. Если вы не видите прямоугольник, то это не должно быть проблемой оси Z. Отсутствие прямоугольника может быть результатом другой ошибки. Если бы позиции или якоря были просчитаны неправильно, вы могли бы получить прямоугольник с правильным Z, но Width = 0, Height = 0. Но, поскольку они у вас жестко закодированы, это довольно невозможно.
Еще одна очень важная вещь — вы не сказали, где вы наблюдаете эффект. Вы видите это в реально работающем приложении, в Qt Designer или подобном инструменте? Много раз я видел 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;
}
Я изменил якоря так, чтобы кадры были упорядочены точно. Это установка зависимостей макета от имени root <- кг <- MV <- BBar вместо того, чтобы все они были параллельными и независимыми. Если макет работает. Если в этой настройке прямоугольник не виден, то в другом месте действительно что-то напортачило.
Других решений пока нет …