0

I'm using the TextArea component in QML for text editing. There's an issue: when I try to select a single tab (\t) character, it doesn't get highlighted. The problem is that the tab character doesn't show up as selected when I try to select it individually.

Here's a code example:

import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 800
    height: 600

    TextArea {
        id: textArea
        anchors.fill: parent
        text: "Tab" + "\t" + "Highlighting" + "\t" + "Issue"
        selectionColor: "lightblue"
        font.pixelSize: 18
    }
}

When I attempt to select a single tab character (by directly highlighting it with the mouse or using Shift + arrow keys), the tab character doesn't change color. However, if I select the tab along with other text, it gets highlighted properly. Is there a way to make sure that even a single tab character gets highlighted when I select it on its own?

Pater Mark
  • 89
  • 1
  • 1
  • 8

1 Answers1

1

You can do a workaround by calculating and drawing the selection yourself with positionToRectangle() calls, e.g.

TextArea {
    id: textArea
    anchors.fill: parent
    text: "Tab" + "\t" + "Highlighting" + "\t" + "Issue"
    selectionColor: "transparent" //"lightblue"
    property rect startRect: positionToRectangle(selectionStart)
    property rect endRect: positionToRectangle(selectionEnd)
    font.pixelSize: 18
    background: Item {
        Rectangle {
            x: textArea.startRect.x
            y: textArea.startRect.y
            width: textArea.endRect.x - textArea.startRect.x
            height: textArea.endRect.height
            color: "lightblue"
        }
    }
    Component.onCompleted: select(3, 4)
}

You can Try it Online!

Reference:

Stephen Quan
  • 21,481
  • 4
  • 88
  • 75