2017-02-20 5 views
1

내가 Qt는 응용 프로그램, QML 윈도우와 사용자 정의 클래스, 그이 qmlRegisterType()에 등록되어 있고, 이것은 기본적으로 내 main입니다 :액세스 명령 줄 인수

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 선거. Link. 내 qml 파일에서 Application.arguments에 액세스 할 수 있지만 그 다음에 할 일은 무엇입니까? QML 엔진이 정의되지 않은 유형이라고 말합니다. 목록처럼 액세스 할 수 없습니다. 이자형. 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

당신은 단지이 argv[]에서 [1]을 사용하여 코드 (아마도 그것을 QList 첫번째? 할) 추가 할 수 없습니다시겠습니까?

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

는하지만, 다른 방법이있다 : 당신은 당신의 main 기능에, 바로 거기 MyType를 인스턴스화 한 다음 위의 코드를 사용하여 QML로을 전달할 수 있습니다. 물론 MyType을 메타 객체 시스템에 알려야하지만 이미 (IIRC)를 qmlRegisterType으로 호출했습니다.

분명히 http://doc.qt.io/qt-5/qtqml-cppintegration-contextproperties.html#setting-a-simple-context-property에서 두 가지 방법에 대한 세부 정보를 제공해야합니다. Qt API를 사용하여 C++과 QML간에 정보를 공유하려고합니다. 당신이 MyType의 생성자 내부의 인수에 액세스해야하는 경우

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

1

당신이 그들을 검색해야 : 당신이 할 수 QML을 통해

const QStringList args = QCoreApplication::arguments(); 

통로, 너무 늦을 것 생성자 인수를 전달합니다.