2017-02-20 21 views
1

私はQtのアプリ、QMLウィンドウやカスタムクラス、それはqmlRegisterType()に登録されているを持っている、これは基本的に私のmainです:Accessコマンドライン引数

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 
    qmlRegisterType<MyType>(...); 
    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/MyType.qml"))); 
} 

私が変化することを、重要なコマンドラインオプションを持っています私はQMLを経由して、コマンドライン引数にアクセスしたい理由ですMyTypeのコンストラクタは、私は少しを調査し、私がこれまでに二つの方法を参照してください。その仕様のQt 5が持っていたまで、Qtのドキュメントに存在していた

  1. 神秘Qt.Application.arguments、されているr eleased。 Link. qmlファイルのApplication.argumentsにアクセスできますが、次にそれをどうすればいいですか? QMLエンジンは未定義のタイプだと言っていますが、リストのようにアクセスすることはできません。 e。 Application.arguments[0]はエラーTypeError: Cannot read property '0' of undefinedを返します。
  2. QCommandLineParserでコマンドライン引数を取得し、何とかそれをqmlRegisterType()で登録された私のカスタムクラスに渡します。私が理解する限り、MyTypeのコンストラクタはQMLエンジン自体によって呼び出されますが、どのように引数を渡すことができますか?
+2

'Qt.application.arguments [index]'は、 'Application.arguments'ではなく、引数を呼び出す正しい方法です。 'Component.onCompleted:console.info("実行可能: "+ Qt.application.arguments [0])'は完璧に動作します。あなたはオプション1に行くことができないことを考えると?オプション2は実行可能かもしれないが、アウトオブボックスではない。 – BaCaRoZzo

+0

あなたは正しいです、argsは 'Qt.application.arguments [index]'を介してアクセス可能ですが、私は主に文書の不足のためにそれを得ることができませんでした。 Qt Creatorはまた、 'arguments'をオートコンプリートしません。 – Asalle

答えて

2

[1]のコードを使用してargv[]を追加することはできません(QListが最初になりますか?)。

QQuickView view; 
view.rootContext()->setContextProperty("currentDateTime", QDateTime::currentDateTime()); 
view.setSource(QUrl::fromLocalFile("MyItem.qml")); 
view.show(); 

しかし、別の方法があります:あなたは、あなたのmain機能で、右がMyTypeをインスタンス化して、上記のコードを使用してQMLにそれを渡すことができます。もちろん、MyTypeをメタオブジェクトシステムに知らせなければなりませんが、すでにqmlRegisterTypeを呼び出すことで(IIRC)完了しました。

具体的には、http://doc.qt.io/qt-5/qtqml-cppintegration-contextproperties.html#setting-a-simple-context-propertyを参照してください。両方の方法について詳しく説明してください。 C++とQMLの間で情報を共有しようとしていますが、これはQt APIを使用して行う必要があります。

[1] http://doc.qt.io/qt-5/qtqml-cppintegration-contextproperties.html#setting-a-simple-context-property

1

をあなたはMyTypeのコンストラクタの内部で引数にアクセスする必要があるなら、あなたがそれらを取得する必要がありますすることができますようにQMLて

const QStringList args = QCoreApplication::arguments(); 

のアクセスは、遅すぎるだろうコンストラクタの引数を渡しません。

関連する問題