4

我正在尝试创建一个在我的QTextEdit实例的选定文本下划线的按​​钮。

在构造函数中,我正在激活光标并为稍后使用的 setFontUnderline 方法设置一个 bool 变量。

QTextCursor cursor1 = ui.myQTextfield->textCursor();
ui.myQTextfield->ensureCursorVisible();
test1 = false;

下面的第一种方法是通过按下下划线按钮来执行的,第二种方法是通过释放它来执行的。

void Hauptfenster::pressed_underlinebutton()
{
    test1 = true;
    ui.myQTextfield->setFontUnderline(test1);   
}

void Hauptfenster::released_underlinebutton()
{
    cursor.clearSelection();
    test1 = false;
    ui.myQTextfield->setFontUnderline(test1);
}

问题是,在这段代码中,选中的文本首先被pressed_underlinebutton() 方法加下划线,然后立即被released_underlinebutton 方法取消下划线。

使用released_underlinebutton() 方法,我想在再次设置setfontunderline(false) 时不再选择取消下划线。

4

1 回答 1

2

使用 QTextCursor 副本

该文档需要更多阅读:

QTextCursor QTextEdit::​textCursor() const

返回代表当前可见光标的 QTextCursor 的副本。请注意,返回光标的更改不会影响 QTextEdit 的光标;使用 setTextCursor() 更新可见光标。

它写道,您获得了一份副本,因此当您尝试更改文本光标功能时,您正在对副本进行操作,而不是在原件上进行操作。

因此,您应该确保如果您希望更改在文本编辑控件上生效,您需要将文本光标设置回来,如下所示:

cursor.clearSelection();
ui.myQTextfield->setTextCursor(cursor); // \o/

直接移动QTextEdit的光标

但是,还有另一种方法可以解决此问题

QTextCursor::Left   9   Move left one character.
QTextCursor::End    11  Move to the end of the document.

所以,你会写这样的东西:

ui.myQTextfield->moveCursor(QTextCursor::End)
ui.myQTextfield->moveCursor(QTextCursor::Left)
于 2014-12-25T18:53:45.430 回答