2014-09-08 1 views
0

ApplicationWindow에서 다른 것으로 전환하는 중이 문제가 발생합니다. ApplicationWindow를 닫고 새로 엽니 다.

는 I는 다음 신호를 통해 main.qml를 개방 login.qml이라는 제 창 가지고

onIdAutenticadoChanged: { 
    if(idAutenticado > 0){ 
     console.log("login.qml: Autenticado ID: " + idAutenticado); 
     LoginController.abrirMain(); 
     close(); 
    } else if(idAutenticado == 0){ 
     senhaInput.text = ""; 
     console.log("Falha na autenticação: Usuário e/ou senha inválidos."); 
     lblMsgErro.text = "Usuário e/ou senha inválidos."; 
     lblMsgErro.visible = true; 
     loginInput.focus = true; 
    } 
} 

슬롯 LoginController.abrirMain()로드 및 main.qml 표시 것이다

void QLoginController::abrirMain() 
{ 
    QQmlApplicationEngine engine; 
    engine.rootContext()->setContextProperty("MainController", new QMainController(0,m_autenticado)); 
    engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); 

    QQuickWindow* window = qobject_cast<QQuickWindow*>(engine.rootObjects().at(0)); 
    window->showFullScreen(); 
} 

문제는 main.qml이 표시되지 않습니다. 질문

//main.qml 
ApplicationWindow { 
    id: mainWindow 
    visible: true 
    modality: "WindowModal" 
    visibility: "FullScreen" 
    color: "#09435b" 
} 

: 나는이 새로운 창을 열려면 올바른 접근 방식을 사용하고 있습니까? 그렇지 않다면 어떻게해야합니까?

답변

1

스택에 엔진을 생성 했으므로 : abrirMain()가 반환되기 전에 자동으로 삭제되므로 윈도우도 손상됩니다.

힙 엔진을 만들어야합니다. 이 같은 것 :

// 'this' will become engine's parent and will automaticlaly delete engine when 'this' is deleted 
QQmlApplicationEngine *engine = new QQmlApplicationEngine(this); 
engine->rootContext()->setContextProperty("MainController", new QMainController(0,m_autenticado)); 
engine->load(QUrl(QStringLiteral("qrc:///main.qml"))); 

QQuickWindow* window = qobject_cast<QQuickWindow*>(engine->rootObjects().at(0)); 
window->showFullScreen(); 
+0

최고입니다! 고마워요! – RafaelTSCS

관련 문제