Почему cursor.clearselection() не работает в этом примере?
Я пытаюсь создать кнопку, которая подчеркивает выделенный текст моего QTextEdit
пример.
В конструкторе я активирую курсор и устанавливаю переменную bool для метода setFontUnderline, который будет использован позже.
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);
}
Проблема в том, что в этом коде выделенный текст сначала подчеркивается методом press_underlinebutton(), а затем мгновенно отменяется подчеркиванием с помощью метода release_underlinebutton.
С помощью метода release_underlinebutton() я хочу сделать так, чтобы больше не было выделений для подчеркивания при повторной установке setfontunderline(false).
1 ответ
Использование копии 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)