2017-03-20 7 views
0

を通じてインタフェースの設定、私は私に言ってローカルxmlファイルを持っている:のQt - XML

  • 私のインターフェースがどのページについて
  • を持っている必要がありますどのように多くの「スワイプ」ページ、行数
  • 任意の行についてこれはテンプレートで、どのように多くの列 (任意の列がラベルとあなたは、ノード間を見つけるの属性に依存した値が含まれます)

<?xml version="1.0" encoding="utf-8"?> 
<parameters version="2.0"> 
     <page pageNum = "2"> 
      <row colNum = "1"> 
       <column> 
        <id>00001</id> 
        <name>parameterName</name> 
        <type>parameterType</type> 
        <value>parameterValue</value> 
        <min>0</min> 
        <max>100</max> 
        <step>1</step> 
       </column> 
      </row> 
      <row colNum = "2"> 
       <column> 
        <id>00002</id> 
        <name>parameterName</name> 
        <type>parameterType</type> 
        <value>parameterValue</value> 
        <min>0</min> 
        <max>100</max> 
        <step>1</step> 
       </column> 
       <column> 
        <id>00003</id> 
        <name>parameterName</name> 
        <type>parameterType</type> 
        <value>parameterValue</value> 
        <min>0</min> 
        <max>100</max> 
        <step>1</step> 
       </column> 
      </row> 
     </page> 
     <page> 
      <!-- ... etc ... --> 
     </page> 
</parameters> 

いくつかの調査の後、私はいくつかのフォーラムで、XmlListModelが適切ではないことを発見しました。 Qtで働いていると考えてどうすればいいですか?

https://lists.launchpad.net/ubuntu-phone/msg12284.html私はxmlファイルを読むためにXMLHttpRequestを使用していますが、これは私のXMLファイルがローカルなので使用できません。

誰かが私を助けることができますか?

ありがとうございました!

+0

実際の質問は何ですか?あなたは何を達成しようとしていますか? –

+0

実際の質問は、このXMLファイルを通してqmlベースのインターフェイスを設定する方法です! QmlにはXmlListModelがありますが、このような複雑なものには使用できません... – Elena

+1

qmlを直接作成するのではなく、xmlをqmlに変換する意味はなんですか?なぜ 'XmlListModel'はそれにはうまくいかないのですか? – folibis

答えて

0

これはほぼ確実にXmlListModelで行うことができますが(質問に対するコメントを参照)、モデルの各インスタンスがすべての解析とクエリを実行する必要があるため、これはかなり無駄になります。

一つXmlListModelすることが

XmlListModel { 
    // pageNum is a property set on each page, e.g. via the model.index of the Repeater generating the pages 
    query: "/parameters/page[@pageNum=" + pageNum + "]/row" 

    XmlRole { name: "id"; query: "column/id/string()" } 
    // ... and so on 
} 

(クエリがテストされていない)

XmlListModel { 
    query: "/parameters/page" 
} 

があるページ数、各ページは、そのページの行を抽出し、モデルを持っているでしょうのための入力を提供します私は最善の方法は、単一のページの行を表すことができるカスタムのQAbstractListModelサブクラスを作成することだと思います。

次に、そのタイプのリストプロパティを持つオブジェクトをページのモデルとして使用できます。各ページは「行モデル」を使用しています。

解析は1回だけ実行されます。 QXmlStreamReaderで「行モデル」のリストを作成し、それぞれの内容を取得します。