2014-09-08 3 views
0

Я столкнулся с этой проблемой, пытаясь переключиться с ApplicationWindow на другой.Закрытие приложенияWindow и открытие нового?

У меня есть это первое окно под названием login.qml который открывает main.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

Смежные вопросы