如何在使用QML TextInput时停止在ios上显示本机上下文菜单

时间:2017-08-14 11:11:43

标签: ios qt qml

我使用的是Qt5.7.1 在iOS中,长按QML TextInput会显示带有选择/选择全部/粘贴项目的本机上下文菜单。如何阻止此菜单显示,同时允许TextInput仍可编辑。

如果我使用Qt 5.6.2,TextInput不会显示这样的菜单。

使用下面的代码,我可以阻止上下文菜单显示在5.7.1中,但是光标位置总是在文本末尾结束。

import QtQuick 2.5
import QtQuick.Window 2.0

Rectangle
{
 color: "yellow"
 width: 100; height: 100


 Rectangle {
     color: "white"
     width: 100; height: 50
     anchors.centerIn: parent


     TextInput{
         id:tip
         text:"test123"
         anchors.fill: parent

         onActiveFocusChanged: {
            console.log("tip onActiveFocusChanged")
         }
         onCursorPositionChanged: {
             console.log("onCursorPositionChanged:" + tip.cursorPosition )
         }


         MouseArea {
             id:ma
             anchors.fill: parent
             propagateComposedEvents:true

             onPressed: {
                 console.log("ma onPressed:" + tip.cursorPosition )
                 mouse.accepted = true
                 tip.focus = false;

             }

             onClicked: {
                 console.log("ma onClicked:" + tip.cursorPosition )
                 mouse.accepted = false
                 tip.forceActiveFocus();

             }

             onPressAndHold:{
                 console.log("ma onPressAndHold")
                 mouse.accepted = true
                 tip.focus = false;
             }
         }
     }
 }
}

我想知道是否有更好的方法可以做到这一点,并且还有一个完全可编辑的TextInput。

1 个答案:

答案 0 :(得分:0)

我可以通过下面的黑客停止编辑菜单显示在ios上:\

import QtQuick 2.5
import QtQuick.Window 2.0

Rectangle
{
    color: "yellow"
    width: 100; height: 100
    Rectangle {
         color: "white"
         width: 100; height: 50
         anchors.centerIn: parent

         TextInput{
             id:tip
             text:"test123"
             anchors.fill: parent
             MouseArea {
                 id:ma
                 anchors.fill: parent
                 propagateComposedEvents:true


                 onPressed: {
                     mouse.accepted = false
                     tip.focus = false
                     tip.focus = true
                 }
             }
             onSelectedTextChanged:tip.deselect()

         }
     }
}