1

私は Qt クイック コントロール 2 の開発に非常に慣れていません。Android用のクロスプラットフォームアプリケーションを1つ開発しています。次のようにC++コードから新しい画面をロードしています

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QQmlApplicationEngine engine;

CommunicatorClass mCommunication;

engine.rootContext()->setContextProperty("CommunicatorClass", &mCommunication);

engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

QObject *topLevel = engine.rootObjects().value(0);

QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);

window->show();

return app.exec();

}

これにより、サインイン画面が読み込まれます。ユーザーがユーザー名を送信すると、パスワード アプリケーションは C++ コードで同じことを確認します。したがって、qml から c++ への通信は正常に機能しています。ユーザー名とパスワードが検証されたら、次の画面をロードしたいと思います。私はc ++とqtクイックコントロール2の両方に非常に慣れていないので、この場合の進め方を教えてください

4

1 に答える 1

1

1 つのオプションは、「現在の画面」を参照する C++ からエクスポートされたオブジェクトのプロパティを持つことです。main.qml のコードは、 a を使用しLoaderてその画面をロードできます。

これは、C++ では次のようになります。

class CommunicatorClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString currentScreen READ currentScreen NOTIFY currentScreenChanged);

public:
    QString currentScreen() const;
signals:
    void currentScreenChanged();
};

QMLでは、次のようになります。

Window {
    Loader {
        source: CommunicatorClass.currentScreen
    }
}

currentScreenプロパティが main.qml に関連する QML ファイルを参照していると仮定します

于 2016-10-12T10:04:11.487 に答える