行为:我想要实现的是简单的,当我打开我的应用程序时,我将检查QSettings
并验证有效的令牌,如果我有一个,我将打开我的主窗口,否则我将打开授权窗口。
问题:考虑bool validToken = true
。我怎样才能打开我的qrc:/authorization.qml
传递一些参数,比如说一个网址?如果它是假的,打开我的qrc:/main.qml
传递一些不同的论点,例如我的个人资料。
我尝试过:
我尝试使用QQmlApplicationEngine::load()
打开不同的窗口,但我无法加载与main.qml
不同的任何内容。
我当时正在考虑在main.qml
中使用Loader。但我仍然不清楚如何做到这一点。
答案 0 :(得分:4)
我建议您使用settings in QML,这是完全可行的,实际上比在C ++中使用QSettings
容易得多。
此外,从你的方式来看,它听起来不像你需要两个不同的窗口,你只需要一个窗口,根据你是否被授权显示不同的东西。
所以你可以做一些简单的事情:
import QtQuick 2.8
import Qt.labs.settings 1.0
ApplicationWindow {
id: main
visible: true
width: 1280
height: 1024
property bool isAuthorized: false
Settings {
property alias isAuthorized: main.isAuthorized
}
Loader {
source: isAuthorized ? "AppView.qml" : "Authorize.qml"
}
}
基本上,Settings
元素将存储您的应用是否已在不同应用运行之间获得授权,如果您被授权您的应用将显示应用视图,如果不是,它将显示授权视图,您可以在其中输入一些数据并将其传递给将执行授权的某个C ++函数,并将返回的值分配给isAuthorized
。
此外,为了让qml设置正常工作,您必须在main.cpp中填写您的应用数据:
app.setOrganizationName("yourOrg");
app.setOrganizationDomain("domain.org");
app.setApplicationName("appName");
BTW认为设置实际上不会以任何方式加密或混淆,并且从应用程序外部手动编辑设置为非常简单,所以你可能想要使用更复杂的东西,比如说a哈希字符串,您可以运行一些验证,而不是简单的true或false布尔值。