Закрытие ApplicationWindow и открытие нового?

0

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

У меня есть это первое окно с именем 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"
}

Вопрос: Я использую правильный подход, чтобы открыть это новое окно? Если нет, как мне это сделать?

Теги:
qml

1 ответ

1
Лучший ответ

Потому что вы создаете движок в стеке :), который будет удален автоматически, прежде чем abrirMain() вернется и, следовательно, уничтожит это окно тоже.

Вы должны создать движок в куче. Что-то вроде этого:

// 'this' will become engine 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
    Ты лучший! Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню