如何在不处于编辑模式时隐藏插入符号?

时间:2015-08-27 18:28:19

标签: qt text-editor qgraphicsitem qgraphicstextitem

我有TextItem继承QGraphicsTextItem。我这样做是为了在双击时我可以编辑文本,当点击时,文本不再可编辑。

void TextItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event)
{
    setTextInteractionFlags(Qt::TextEditorInteraction);
    setFocus();

    int p = document()->documentLayout()->hitTest(event->pos(), Qt::FuzzyHit);
    QTextCursor _cursor = textCursor();
    _cursor.setPosition(p);
    setTextCursor(_cursor);
}

void TextItem::focusOutEvent(QFocusEvent *event)
{
    Q_UNUSED(event);
    setTextInteractionFlags(Qt::NoTextInteraction);
}

单击时,文本不再可编辑 - 但插入符号仍然可见。

setCursor(Qt::OpenHandCursor);中添加focusOutEvent(并且可能试图记住要设置的光标形状......我还不知道如何)修复此问题 - 使插入符号消失 - 但我不知道认为这是正确的解决方案。

然而,我不能在QTextCursor中找到任何方法,以便在不再处于编辑模式时隐藏插入符号 - 并且似乎设置NoTextInteraction应该已经完成​​了...

不处于编辑模式时隐藏插入符号的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

添加了关于丢失焦点的清晰选择,因为似乎不仅留下了插入符号,而且任何选定的文本也被选中 - 这不是我想要的行为。

void TextItem::focusOutEvent(QFocusEvent *event)
{
    Q_UNUSED(event);
    setTextInteractionFlags(Qt::NoTextInteraction);

    QTextCursor _cursor = textCursor();
    _cursor.clearSelection();
    setTextCursor(_cursor);
}

以上内容清除了插入符以及任何选定的文本片段。

(如果有人在阅读这个问题时希望保存对文本片段的选择,但不显示插入符号,我在问题中提到的选项 - 通过设置QCursor - 可能是最佳选择)