2

QML に 2000 個以上のアイテムを保持する ComboBox があります。最後の要素までスクロールするには項目が多すぎます。ComboBox の検索フィルタを追加するにはどうすればよいですか? 文字を入力すると、一致する結果がリストに表示されます。または、スクロールを速くするためにマウス ホイールの速度を上げることはできますか?

私は次のような解決策を見つけました:

    ComboBox {
                id:trCombo
                model:combotr.datalist
                textRole: "value"
                anchors.fill: parent
                currentIndex:-1;



                contentItem: Text {
                    leftPadding: 0
                    rightPadding: trCombo.indicator.width + trCombo.spacing

                    text:trCombo.currentIndex==-1 ? "":trCombo.model[trCombo.currentIndex].value
                    font: trCombo.font
                    horizontalAlignment: Text.AlignLeft
                    verticalAlignment: Text.AlignVCenter
                    elide: Text.ElideRight
                }

                popup: T.Popup {
                    id:mpopup
                    y: trCombo.height - (trCombo.visualFocus ? 0 : 1)

                    width: trCombo.width
                    implicitHeight: listview.contentHeight
                    topMargin: 6
                    bottomMargin: 6

                // focus: true
                    closePolicy: Popup.NoAutoClose

                    contentItem: Item {


                        Column
                        {
                        anchors.fill: parent
                        spacing: 5
                        TextField
                        {

                        placeholderText: "arama yapın"
                        width: trCombo.width
                        height: dp(35)
                    // color: "red"
                        focus:true
                        inputMethodHints: Qt.ImhNoPredictiveText;

                        onTextChanged:{
                            //console.log("degisiyor");
                            process.filtertr(text);
                        }

                        onAccepted:{
                        //  console.log("Tasarım Bitti");
                            isfinished(true);
                        //  text="";


                        }




                        }

                        ListView {
                        id: listview
                        clip: true
                        model: trCombo.popup.visible ? trCombo.delegateModel : null
                        currentIndex: trCombo.highlightedIndex
                        width: trCombo.width
                        height:dp(500)


                        Rectangle {



                            z: 10
                            parent: listview
                            width: listview.width
                            height: listview.height
                            color: "transparent"
                            border.color: "#bdbebf"
                            layer.smooth: true
                        }

                        ScrollIndicator.vertical: ScrollIndicator { }
                    }

                    }
                }

                    background: Rectangle {  }

                    onClosed: {
                    if(!flag)
                    {
                        mpopup.open();
                    }

                    else
                    flag=false;
                    }


                }


                delegate: ItemDelegate {
                    width: trCombo.width
                    text: trCombo.textRole ? (Array.isArray(trCombo.model) ? modelData[trCombo.textRole] : model[trCombo.textRole]) : modelData
                    font.weight: trCombo.currentIndex === index ? Font.DemiBold : Font.Normal
                    highlighted: trCombo.highlightedIndex == index

                    onClicked: {
                        isfinished(true);
                    }
                }



                onCurrentIndexChanged: {

                    if(currentIndex!=-1)
                    {
                        var sqlid=model[currentIndex].sqlid;
                        combotr.getsqlid(sqlid,1,Query.SelectSubParam,Query.Subq,"TRC",1);
                        TaskResult.taskresult.HatBilgisi_TR=sqlid ;
                        trsCombo.enabled=true;


                    }

                    else
                        trsCombo.enabled=false;

                    trsCombo.currentIndex=-1;
                }


        }
4

1 に答える 1