QML:在 TextField 中更改光标颜色

Ale*_*ich 1 qt qml qt5 qtquick2 qtquickcontrols2

如何在 QMLTextField元素中更改光标颜色和可能的宽度?假设我们有以下一个:

import QtQuick 2.12
import QtQuick.Controls 2.12

TextField {
    id: control
    placeholderText: qsTr("Enter description")

    background: Rectangle {
        implicitWidth: 200
        implicitHeight: 40
        color: control.enabled ? "transparent" : "#353637"
        border.color: control.enabled ? "#21be2b" : "transparent"
    }
}
Run Code Online (Sandbox Code Playgroud)

如何使光标颜色为绿色或蓝色或其他什么?谢谢!

Nic*_*art 7

@eyllanesc 提供了一个非常好的答案,但我想指出,当您定义自定义cursorDelegate.

如果你想让光标闪烁。可以使用动画来完成:

import QtQuick 2.12
import QtQuick.Controls 2.12

TextField {
    id: control
    placeholderText: qsTr("Enter description")

    background: Rectangle {
        implicitWidth: 200
        implicitHeight: 40
        color: control.enabled ? "transparent" : "#353637"
        border.color: control.enabled ? "#21be2b" : "transparent"
    }

    cursorDelegate: Rectangle {
        id: cursor
        visible: false
        color: "salmon"
        width: control.cursorRectangle.width

        SequentialAnimation {
            loops: Animation.Infinite
            running: control.cursorVisible

            PropertyAction {
                target: cursor
                property: 'visible'
                value: true
            }

            PauseAnimation {
                duration: 600
            }

            PropertyAction {
                target: cursor
                property: 'visible'
                value: false
            }

            PauseAnimation {
                duration: 600
            }

            onStopped: {
                cursor.visible = false
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


eyl*_*esc 6

您必须将 Rectangle 设置为您想要的颜色作为光标,cursorDelegate因为TextField继承自TextInput并因此共享该属性。

import QtQuick 2.12
import QtQuick.Controls 2.12

TextField {
    id: control
    placeholderText: qsTr("Enter description")
    cursorDelegate: Rectangle {
        visible: control.cursorVisible
        color: "salmon"
        width: control.cursorRectangle.width
    }
    background: Rectangle {
        implicitWidth: 200
        implicitHeight: 40
        color: control.enabled ? "transparent" : "#353637"
        border.color: control.enabled ? "#21be2b" : "transparent"
    }
}
Run Code Online (Sandbox Code Playgroud)