如何更改QQuickVi的源代码

2024-09-10 21:48:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做游戏,这是用qml和pyqt编写的,但是应该分成两个窗口(启动器+游戏)。在这两个qml文件之间切换的正确方法是什么?我不想使用QmlLoader,因为它不调整窗口大小,它需要很多信号!我也在尝试这个变体:

view.engine().clearComponentCache()
view.setSource(source())

但没用(qml窗口停止工作。。。-典型的windows错误,但是pycharm控制台中没有写入错误)

我的代码如下:

^{pr2}$

正如你可能看到的,我的结构有点混乱,因为我是第一次做这种转换行为,所以我真的不知道,应该怎么做才对。。。欢迎所有建议!:)


Tags: 文件方法view游戏source信号错误变体
1条回答
网友
1楼 · 发布于 2024-09-10 21:48:07

我以前也面临同样的问题。相反,我反复使用相同的QQuickView加载相同的组件,我在QML中创建了一个组件作为内容容器,并将所需组件作为其子组件加载。每次设置新组件时,我们都会销毁当前组件并再次将新组件设置为子组件。在

// ContentFrame.qml
Item{
    width: 800
    height: 600
    Item{
        id: contentContainer
        anchors.fill: parent
        anchors.margins: 4
    }
}
在任何事情之前,请原谅我,但是功能代码是用C++编写的,但是我认为这个概念是可以理解的。我做了这个过程的一个简短版本,我希望它可以移植到python上。在

为了加载ContentFrame组件,我使用了一个从QQuickView(ViewManager)派生的类,它有一个名为setView的方法。此方法加载一个组件(在您的例子中是启动器或游戏),将其设置为contentContainer的子组件,并将其anchor.fill设置为填充整个父组件。在

^{pr2}$

有更多的代码,但是ViewManager的核心是这个方法。我不在这里调用QQmlEngine::clearComponentCache(),因为我多次加载相同的组件,但在您的情况下,这可能是个好主意。在

相关问题 更多 >