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.....
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章