Почему 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) больше не было выделений для подчеркивания.

3

Решение

Документация требует немного больше чтения:

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)
2

Другие решения


По вопросам рекламы [email protected]