1

我正在尝试构建一个游戏,其中 ui 部分是用 qml(菜单等)制作的,而渲染和逻辑部分是用 C++ 制作的。为此,我使用了 QGLWidget 子类。游戏从 Qml 开始(在主函数中使用 QDeclarativeContext),然后单击“NewGame”,我正在加载我的 QGLWidget 子类。像这样的东西:

GameButton{
    id:button2_1_1
    x: 69
    y: 101
    width: 80
    height: 80
    onClicked:{ myObject.initialize(); myObject.show(); }
}
// myObject sets the context property to the object of my QGLWidget subclass

问题是当我加载 QGLWidget 时,我无法找到关闭 Qml 窗口的方法。与我所做的一样,两个窗口同时显示。

这是它的代码。

// 导入 QtQuick 1.0 // 以 S60 5th Edition 或 Maemo 5 为目标导入 QtQuick 1.1

Rectangle {
id:newGameMenu
width: 640
height: 360
signal button2Clicked();
onButton2Clicked: console.log("new game should start")


Image{
    id:background
    source:"menubackground.jpg"
    anchors.fill:parent

    Button2 {
        id: button21
        x: 70
        y: 101
        width: 42
        height: 42
    }
}

Button2{
    id:button2_1_1
    x: 69
    y: 101
    width: 44
    height: 44
    onClicked:{ myObject.abc(); myObject.show(); console.log("glwindow called"); }
}

}

main.cpp


#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include <QDeclarativeView>
#include <QDeclarativeItem>
#ifndef GLWINDOW_H
#include "glwindow.h"
#endif
#include <QObject>

Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QScopedPointer<QApplication> app(createApplication(argc, argv));
    QDeclarativeView view;
    GLWindow w;
    view.rootContext()->setContextProperty("myObject", &w);
    view.setSource(QUrl::fromLocalFile(""));
    view.show();
    qDebug() << "into the qml";


    return app->exec();

}

4

4 回答 4

1

与我所做的一样,两个窗口同时显示

我觉得你正在显示两个窗口,一个 QDeclarativeView 和另一个 QGLWidget。在这种情况下,您应该在显示 QGLWidget 时尝试隐藏您的 QDeclarativeView,

于 2012-03-23T09:38:36.247 回答
1

请参阅http://qt-project.org/forums/viewthread/4109这可能会回答您的问题

于 2012-03-23T10:25:18.437 回答
0

尝试在 中设置.visible=false菜单小部件onClicked

于 2012-03-23T08:41:27.410 回答
0

那么http://qt-project.org/forums/viewthread/15160/

另外,我会使用带有 2 个 QWidget 的 QStackedWidget:一个是包含 QML 的 QDeclarativeView,另一个是包含 OpenGL 的 QGLWidget;在 QML 和 OpenGL 之间移动意味着调用 QStackedWidget::setCurrent();

于 2012-03-26T10:46:26.533 回答