2012-03-23 7 views
1

Я пытаюсь создать игру, в которой часть ui выполнена в qml (меню и т. Д.), В то время как часть рендеринга и логики находится на C++. Для этого я использую подкласс QGLWidget. Игра начинается с Qml (с использованием QDeclarativeContext в основной функции) и при нажатии «NewGame» я загружаю свой подкласс QGLWidget. Что-то вроде этого:Как закрыть окно Qml при создании 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 

Проблема заключается в том, что я не могу понять способ закрыть свое окно QML, когда я загружаю QGLWidget. Как с тем, что я сделал, два окна отображаются одновременно.

Вот код для этого.

// импорт 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(); 

}

ответ

1

Как с тем, что я сделал два окна отображаются одновременно

Я чувствует, как вы показываете два окна, одно QDeclarativeView и другие QGLWidget. В этом случае, вы должны попытаться скрыть, ваш QDeclarativeView, когда вы показываете QGLWidget,

+0

Я не могу скрыть свой QDeclarativeView – akhil

+0

вы можете объяснить? что вы пытались и что происходит, когда вы пытались скрыть это? – Kunal

+0

Я попытался установить .visible = false для виджета меню в onClicked. Но то, что он делает, устанавливает изображения в меню невидимыми, а не закрывает окно. Я хочу сказать, что я вижу пустое окно и другое окно одновременно. – akhil

0

Попробуйте установить .visible=false для виджета меню в onClicked.

+0

Я попробовал, но то, что он делает, устанавливает изображения в меню невидимым, а не закрывает окно. Я хочу сказать, что я вижу пустое окно и другое окно одновременно. – akhil

+0

Можете ли вы предоставить больше своего QML-кода в вопросе? В частности, код QML для виджета меню, который включает в себя «GameButton». –

+0

Я загрузил код. – akhil

0

насчет http://qt-project.org/forums/viewthread/15160/

Кроме того, я хотел бы использовать QStackedWidget с 2 QWidgets : Одним из них будет QDeclarativeView, который содержит ваш QML и другой QGLWidget, который поддерживает OpenGL; Перемещение между QML и OpenGL будет означать вызов QStackedWidget :: setCurrent();