2017-05-30 2 views
0

QMLコード:コールダイアログ(C++)QTモバイル(iOSとAndroidの)にQMLにファイル

Dialog { 
    id: dialog 
    objectName: dialog 
    modal: true 
    standardButtons: Dialog.cancel | Dialog.Ok 

    title: qsTr("About") 

    Label { 
     text: "Lorem ipsum..." 
    } 
} 

CPP

void LoginPage::checkLogin(QString username, QString password) 
{ 
    if(username == "username" && password == "password") 
    { 

    } 
    else 
    { 
     QObject *rect = findChild<QObject*>("dialog"); 
     //this solution don't work 
    } 
} 

私はCPPからダイアログを呼び出す必要が、私はオンラインで検索しましたしかし私は解決策を見つけませんでした。 ターゲットが開いています。cppファイルのダイアログエラーです。 アイデア

+0

確かに、あなたは 'LoginPage'インスタンスの子を検索しようとしています。 QMLツリーのルート項目を取得し、その子を検索する必要があります。 – folibis

+0

第二に、qmlの 'objectName'を引用符で囲むべきだと思います:' objectName: "dialog" ' – m7913d

+0

シグナルとスロットを使わないのはなぜですか?おそらく、C++側でloginFailed()のようなシグナルを出します。 QMLの内部では、コネクション{target:loginPage; onLoginFailed:console.log( "Meh")}。 – Dinesh

答えて

0

利用可能なアプローチは、非常によく説明されている。here。あなたが求めているものに最も近いバージョンは、QML宣言にfindChildobjectNameというルートオブジェクトを設定する必要があるということです。取得したら、必要なプロパティを変更します。 visibleなど

しかし、それは根本的な要素を持つ必要があるため、ダイアログをあらかじめ作成して非表示にする必要があります。

a context propertyにいくつかのメンバープロパティを登録し、このプロパティを変更してQMLロジックをトリガすることをお勧めします。 diaglogを表示するかどうか。

QMLで検証を直接行うことが、よりクリーンなアプローチです。

+0

私はあなたのリンクを見ましたが、私はリンクのobjetメソッドのように呼んでいません、私はライブラリにcppを含めることはできません –

+0

cppにライブラリを含めるのはどういう意味ですか?基本的には、子コンポーネントのプロパティや関数を変更するには、ルートコンポーネントにアクセスする必要があります。 – Yuki

関連する問題