Я пытаюсь создать кнопку, которая подчеркивает выделенный текст моего 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) больше не было выделений для подчеркивания.
Документация требует немного больше чтения:
QTextCursor QTextEdit :: textCursor () const
Возвращает копию QTextCursor, которая представляет текущий видимый курсор. Обратите внимание, что изменения в возвращенном курсоре не влияют на курсор QTextEdit; используйте setTextCursor (), чтобы обновить видимый курсор.
Он пишет, что вы получаете копию, поэтому, когда вы пытаетесь изменить функции текстового курсора, вы работаете с копией, а не с оригиналом.
Следовательно, вы должны убедиться, что если вы хотите, чтобы изменения вступили в силу для элемента управления редактированием текста, вам необходимо вернуть текстовый курсор обратно следующим образом:
cursor.clearSelection();
ui.myQTextfield->setTextCursor(cursor); // \o/
Есть еще один способ решить эту проблему, тем не мение.
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)