2017-12-11 10 views
0

私と一緒に裸です。 jsonに基づいてモデルを作成するには?デリゲートとは何ですか? 以下のロジックは正しいですか?QML jsonのリクエストでデータを表示する方法

Model -> delegate -> json request -> json get -> show to list view 

以下のコードでは、画面上にデータが表示されません。 QML jsonリクエストでデータを表示するには?

おかげ

UPDATED WORKING CODE:

import VPlayApps 1.0 
import QtQuick 2.0 
import QtQuick 2.3 
import QtQuick.Controls 1.2 
import "qrc:/" 

Item { 
    id: item1 
    anchors.fill: parent 


    ListModel { 
     id: ***modelListIP*** 
    } 

    ListView { 
     id: listview 
     anchors.fill: parent 
     model: ***modelListIP*** 
     delegate: Text { 
      text: listdata 
     } 
    } 

    function getData() { 
     var xmlhttp = new XMLHttpRequest(); 
     var url = "https://api.ipify.org?format=json"; 

     xmlhttp.onreadystatechange=function() { 
      if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) { 
       myFunction(xmlhttp.responseText); 
      } 
     } 
     xmlhttp.open("GET", url, true); 
     xmlhttp.send(); 
    } 

    function myFunction(response) { 
     var objValue = JSON.parse(response); 
      ***modelListIP.append({"listdata": objValue.ip })*** 
    } 

    Button { 
     anchors.bottom: parent.bottom 
     width: parent.width 
     text: "Get Data" 
     onClicked: getData() 
    } 
} 

これはQMLアプリのプロジェクトを使用してQt5.9.2上でテスト。

+0

ビューをどのように表示するか説明できます。これまでのところあなたの問題の説明は混乱しており、何も貢献していません。 – eyllanesc

答えて

1

あなたの例は完全に間違っています。

  1. JSON.parse()は、配列ではなくObjectを返します。したがって、length()を呼び出すことはできません。覚えておいてください - {} - オブジェクト、[] - 配列。

  2. お客様のリクエストは{"ip":"111.111.111.111"}のようになります。 Nameはどこにありますか?だから、あなたは今すぐそうするのではなく、アイテムmodel.append({"listdata": arr.ip })を追加するべきです。パラメータ名を引用符で囲むことを忘れないでください。

  3. listview.model.appendmodel.appendと置き換えてください。 Occam's razorとは何ですか?

  4. modelはお勧めできません。予約語の使用は悪いスタイルです。

このような問題に直面したときには、2度ドキュメントを読むことをお勧めします。

+0

ありがとうございました。私はQMLの新人であり、Model Viewはqm​​lのjsと同様にdelagateであり、非常に新しいものです。私は自分のコードを更新して、現在作業中です。モデルとデリゲートについてもっと読んで勉強しなければなりません。敬具 – NTMS

関連する問題