Qml TextInput: MouseArea導致的無法輸入——多層MouseArea執行異常

  • 現象:在TextInput中加入了一個MouseArea後,發現輸入框無法再接收鼠標和按鍵事件,我的代碼如下:
TextEdit {
    // properties.....
    MouseArea {
        // properties.....
        OnClicked: { /* do something */ }
    }
}
  • 原因:MouseArea默認不會將鼠標事件傳送到控件堆層的低層。這一行爲由MouseArea中的propagateComposedEvents控制,Qt對該屬性的描述如下圖:
    在這裏插入圖片描述
  • 解決方法
  1. 將propagateComposedEvents 設爲true,並在onClicked事件中將焦點設置到輸入框
TextEdit {
    // properties.....
    id: input
    MouseArea {
        // properties.....
        OnClicked: {
         /* do something */
         	input.forceActiveFocus(Qt.MouseFocusReason)
        }
    }
}
  1. 將 MouseArea置換到比TextEdit低的圖層
	MouseArea {
        // properties.....
        OnClicked: { /* do something */ }
    }
	TextEdit {
    // properties.....
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章