首页 > 解决方案 > QtQuick StackView 加载问题

问题描述

我正在阅读 Nicholas Sherriff 的“Learn Qt 5”一书。现在我在让 QtStackView 组件正常工作时遇到了一些问题。

我写了以下代码:

主文件

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/views/MasterView.qml")));

    return app.exec();
}

主视图.qml

import QtQuick 2.5
import QtQuick.Window 2.0
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 1024
    height: 768
    title: qsTr("Client Management")

    StackView {
        id: contentFrame
        initialItem: Qt.resolvedUrl("qrc:/views/SplashView.qml")
    }
}

SplashView.qml

import QtQuick 2.5

Rectangle {
    anchors.fill: parent
    color: "#f04c42"
}

但是在执行时,SplashView.qml 中的矩形没有出现。我没有收到任何错误。如果我将矩形块放在窗口块内,它就可以工作。但是,即使我将带有 id 的矩形放在 StackView 块中,它也不起作用。

我使用的是比本书推荐的旧版本的 QtQuick,因为我使用的不是最新的 debian 发行版。我错过了什么吗?

谢谢

标签: qtqmlc++14qtquick2

解决方案


问题很简单,SplashView 中的 Rectangle 取父级的大小:

Rectangle {
    anchors.fill: parent //<---
    color: "#f04c42"
}

而父级是StackView,但是StackView没有大小,所以解决办法是设置一个大小,为此我们可以使用anchors:

StackView {
    id: contentFrame
    anchors.fill: parent // <--- possible solution
    initialItem: Qt.resolvedUrl("qrc:/views/SplashView.qml")
}

推荐阅读