1

私が持っているのは、連絡先のリストを表示するリストビューです。また、検索ボックスとラベルもあります。検索ボックスに入力されたテキストに基づいて、連絡先リストがフィルター処理されます。

これが私のコードです:

import QtQuick 1.1
import com.nokia.symbian 1.1
import com.nokia.extras 1.1
import QtMobility.contacts 1.1

Window {
id: window

StatusBar {
    id: statusBar
    anchors.top: window.top
    Text {
        id: statusBarTitle
        text: "Contacts"
        color: "#ffffff"
    }
}

ContactModel {
    id: contactModel

    filter:
        IntersectionFilter {
        DetailFilter {
        detail: ContactDetail.PhoneNumber
        field: PhoneNumber.PhoneNumber
        value: PhoneNumber.Mobile
        }

        UnionFilter {
            DetailFilter {
            detail: ContactDetail.Name
            field: Name.FirstName
            value: searchbox.searchText
            matchFlags: Filter.MatchStartsWith
            }

            DetailFilter {
            detail: ContactDetail.Name
            field: Name.LastName
            value: searchbox.searchText
            matchFlags: Filter.MatchStartsWith
            }

            DetailFilter {
            detail: ContactDetail.DisplayLabel
            field: DisplayLabel.Label
            value: searchbox.searchText
            matchFlags: Filter.MatchStartsWith
            }
        }
    }

    sortOrders:
        SortOrder {
        detail: ContactDetail.Name
        field: Name.FirstName
        direction: Qt.AscendingOrder
    }
}

Component {
    id: contactListDelegate
    ListItem {
        id: listItem

        Image {
            id: avatar
            source: contact.thumbnail
            sourceSize.width: 60
            sourceSize.height: 60
            anchors.verticalCenter: parent.verticalCenter
            anchors.left: parent.left
        }

        ListItemText {
            id: nameText
            text: contact.name.firstName + " " + contact.name.lastName
            color: "white"
            anchors.left: avatar.right
            anchors.leftMargin: 10
            font.family: "Helvetica"
            anchors.verticalCenter: parent.verticalCenter
        }
    }
}

ListView {
    id: listView
    anchors.top: searchbox.bottom
    anchors.right: parent.right
    anchors.left: parent.left
    anchors.bottom: toolBar.top
    clip: true
    model: contactModel
    delegate: contactListDelegate
    visible: true
}

SearchBox {
    id: searchbox
    anchors.top: statusBar.bottom
    placeHolderText: "Search Contact"

    onSearchTextChanged: {
        searchingBusyIndicator.running = true
        searchingBusyIndicator.visible = true
        searchTimeoutTimer.restart()
    }
}

Label {
    id: noMatchesLabel
    anchors.centerIn: listView
    visible: false
    text: "No matches"
}

BusyIndicator{
    id: searchingBusyIndicator
    anchors.centerIn: parent
    platformInverted: window.platformInverted
    width: 80
    height: 80
    visible: false
}

Timer{
    id: searchTimeoutTimer
    interval: 1000

    onTriggered: {
        searchingBusyIndicator.running = false
        searchingBusyIndicator.visible = false
    }
}

ToolBar {
    id: toolBar
    anchors.bottom: window.bottom
    tools: ToolBarLayout {
        id: toolBarLayout
        ToolButton {
            flat: true
            iconSource: "toolbar-back"
            onClicked: {
                Qt.quit()
            }
        }
        ToolButton {
            flat: true
            iconSource: "toolbar-search"
            }
        }
    }
}
}

リストに一致するものがない場合、リスト ビューの visible プロパティを false に変更し、label プロパティを true に変更する必要があります。それを達成する方法。

現在起こっていることは、一致するものがないとアプリケーションがクラッシュして終了することです。

4

1 に答える 1

0

この問題の解決策を見つけるのに2日間費やしました...

ここに私の修正があります:

ContactModel {
     ...........
     onRowsInserted: {
     if(last === 0)
     {
         noMatchesLabel.visible = true;
         listView.model = {};
     }
     else
     {
         noMatchesLabel.visible = false;
         listView.model = contactModel;
     }
}

フィルターを使用しているため、contactModel には連絡先がありませんが、listView のモデルを空のモデルに交換します。そうすれば、アプリはクラッシュしません

于 2013-06-03T14:56:55.543 に答える