根据应用程序是否已经过authoarized显示不同的QML文件

时间:2017-08-06 17:26:37

标签: c++ qt qml

行为:我想要实现的是简单的,当我打开我的应用程序时,我将检查QSettings并验证有效的令牌,如果我有一个,我将打开我的主窗口,否则我将打开授权窗口。

问题:考虑bool validToken = true。我怎样才能打开我的qrc:/authorization.qml传递一些参数,比如说一个网址?如果它是假的,打开我的qrc:/main.qml传递一些不同的论点,例如我的个人资料。

我尝试过: 我尝试使用QQmlApplicationEngine::load()打开不同的窗口,但我无法加载与main.qml不同的任何内容。 我当时正在考虑在main.qml中使用Loader。但我仍然不清楚如何做到这一点。

1 个答案:

答案 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布尔值。