如何在间隔或数据更改时刷新XmlListModel中的数据?

时间:2014-04-10 14:13:17

标签: xml qml reload

我见过其他人使用" onSourceChanged:reload();"在XmlListModel中发出信号,但我找不到任何关于它的信息(并且它对我不起作用)。 xml文件快速更新(每秒1或2次)。 我也尝试使用自己的xml文件并手动编辑它,但没有成功。

如何更新ListView / XmlListModel,以便我的应用程序始终显示正确的数据? (这是间隔或当来源发生变化时)。

我的XmlListModel文件(ICDModel.qml)

import QtQuick 2.0
import QtQuick.XmlListModel 2.0

XmlListModel {

    source: "http://192.168.1.103:89/FunctionGenerator/FuncGen1.xml"
    query: "/Component/Signals/Signal"

    onSourceChanged: reload();

    XmlRole { name: "Name"; query: "@Name/string()" }
    XmlRole { name: "Description"; query: "@Description/string()" }
    XmlRole { name: "Value"; query: "@Value/string()"; isKey: true }
}

main.qml中的ListView

ListView {
    id: listView
    anchors.fill: parent
    spacing: 10
    model: ICDModel2 {}
    delegate: contactDelegate
    highlight: highlightBar
    highlightFollowsCurrentItem: false
    focus: true
}

最后是委托(也在main.qml内)

Component {
        id: contactDelegate
        Item {
            id: wrapper
            height: 40; width: parent.width
            Column {
                Text { text: '<b>Name:</b> ' + Name }
                Text { text: '<b>Description:</b> ' + Description }
                Text { text: '<b>Value:</b> ' + Value }

            }
            states: State {
                name: "Current"
                when: wrapper.ListView.isCurrentItem
                PropertyChanges { target: wrapper; x: 20 }
            }
            transitions: Transition {
                NumberAnimation { properties: "x"; duration: 200 }
            }
            MouseArea {
                id: mouse_area1
                anchors.fill: parent
                hoverEnabled: false
                onClicked: {
                    wrapper.ListView.view.currentIndex = index
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

由于这个问题花了我相当长的时间来解决这个问题,原始的海报并没有提供他的解决方案,我将展示如何解决这个问题:

我在源代码中添加了一个随机属性,并使用计时器在给定的时间间隔内重新加载XmlListModel。

SELECT
    groups.*,
    employees.*,
    -- all fields from reports

FROM
    groups

INNER JOIN
    employees
        ON
    employees.id = groups.employee_id

}

XmlListModel {       id:xmlModel

     // Insert Opportunity
    Opportunity opt = new Opportunity(Name='Test',StageName='Prospect', 
                                      CloseDate=date.today(),BidType__c = 'Competitive', 
                                      Business_Line_BU__c = 'BL.619'
                                      );
    insert opt;
opt.PriceBook2 = customPB;
update opt;

。 。