qt - 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 发行版。我错过了什么吗?
谢谢
解决方案
问题很简单,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")
}
推荐阅读
- android - 我可以随时在 Android 上使用应用内商品吗?
- cordova - 在 Cordova 中的 deviceready 事件之前更改状态栏颜色
- c - 从内核进程和系统守护进程中过滤用户进程
- macos - 在收听 KEXT 的 Vnode 范围时获取命令行参数
- java - 如何使用java验证电子邮件地址?
- javascript - 打字稿:来自超类构造函数的成员变量
- android - 通过添加以下行来应对本机应用程序崩溃:应用插件:'com.google.gms.google-services'
- html - 自动换行时的事件
- java - 从树形图中删除元素
- android - 在 Activity.onDestroy() 方法之后,为什么我仍然可以得到这个活动的实例?