您好,登錄后才能下訂單哦!
由于項目需要,需要設計一個可以多選的ComboBox,看了一下文檔,發現QML自帶的ComboBox確實無法多選。看了一下ComboBox的實現,發現彈出的下拉菜單是用Menu實現的,看來只能自己重寫了,畢竟Menu本身就是無法多選的!代碼不多,直接看實現吧!
import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 Item{ id:root implicitWidth: 150 implicitHeight: 30 property alias model: lv.model property var indexs: [] property var m_text: "" function removeValue(arr,val) { //刪除數組中指定的內容arr數組,val內容 for (var i = 0; i < arr.length; i++) { if (arr[i] == val) { arr.splice(i, 1) return arr; } } } Button{ id: btn anchors.fill: parent Text{ anchors.fill: parent anchors.margins: 5 anchors.rightMargin: 30 text: m_text horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pointSize: 12 clip: true elide: Text.ElideMiddle } onClicked: { sv.visible = !sv.visible; } Image{ anchors.right: parent.right anchors.top: parent.top width: root.height height:root.height source:"換成自己下拉按鈕圖片" } } Component{ id: m_del Rectangle{ id:rect color:"white" implicitWidth: 150 implicitHeight: 30 property bool isSelect: false Text{ anchors.fill: parent horizontalAlignment:Text.AlignHCenter verticalAlignment: Text.AlignVCenter font.pointSize: 15 text: label } MouseArea{ anchors.fill: parent hoverEnabled: true onEntered: { if(!isSelect){ rect.color = "#CDDCFE"; } } onExited: { if(!isSelect){ rect.color = "white" } } onClicked: { rect.isSelect = !rect.isSelect; if(!rect.isSelect){ //取消某項 rect.color = "white" //刪除文本中指定的字符串 var arr = m_text.split(","); arr = removeValue(arr,label) m_text = arr.join(","); //刪除數組中記錄指定的內容 indexs = removeValue(indexs,index); } else{ //選擇某項 rect.color = "#F9E977" if(m_text.length == 0) { m_text += label; } else{ m_text += "," + label; } indexs.push(index) } } } } } ScrollView{ id:sv anchors.top:btn.bottom anchors.left: parent.left width: parent.width height: 300 visible: false ListView{ id: lv delegate:m_del anchors.fill: parent } } }
有個地方和官方的ComboBox有些區別,就是需要點擊按鈕才會將下拉列表收起來,不知道怎樣才能實現點擊其他位置,關閉下拉列表,有知道的朋友告訴我一聲,謝啦!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。