2010-09-03 2 views
3

Я хочу отформатировать выделенный текст в QTextEdit, нажав кнопку. Для axample я хочу сделать его полужирным, если он не является полужирным, или нежирным, если он выделен жирным шрифтом. Пожалуйста, помогите мне с примером.Как отформатировать выделенный текст в QTextEdit, нажав кнопку

EDIT:

На самом деле я нашел уже код - Qt демо для текстового редактора, который делает то, что мне нужно:

void 
MyTextEdit::boldText(bool isBold) //this is the SLOT for the button trigger(bool) 
{ 
    QTextCharFormat fmt; 
    fmt.setFontWeight(isBold ? QFont::Bold : QFont::Normal); 
    mergeFormatOnWordOrSelection(fmt); 
} 

void 
MyTextEdit::mergeFormatOnWordOrSelection(const QTextCharFormat &format) 
{ 
    QTextCursor cursor = m_textEdit->textCursor(); 
    if (!cursor.hasSelection()) 
     cursor.select(QTextCursor::WordUnderCursor); 
    cursor.mergeCharFormat(format); 
    m_textEdit->mergeCurrentCharFormat(format); 
} 

Но я не могу понять, что returnes в textCursor () и как происходит слияние свойств? Просто некоторые форматы меняются, некоторые из них остаются постоянными. Как mergeCharFormat функция понимает, что менять и что оставить как есть. Пожалуйста, объясните мне только эти две вещи. Спасибо.

ответ

3

TextCursor() возвращает текст курсора, который содержит позицию курсора, который вы используете в текстовом элементе, см. QTextCursor в классах Qt. Поэтому, выбирая текст, содержащийся в начале и конце позиции курсора, у вас есть текст, который в настоящее время включен.

Что касается mergeCharFormat, я предполагаю, что он используется для применения нового состояния (жирный, курсив, подчеркнутый) и для сохранения существующих. Скажите, что ваш текст уже подчеркивается, и вы применяете жирный шрифт, вы бы хотели сохранить оба.

Надеюсь, что это поможет.

+0

А где кнопка? Или где выбран выделенный текст? – Narek

+1

Вы можете подключить инициированный сигнал кнопки к слоту, который помещает теги HTML в начало и конец выделенного текста. Чтобы найти то, что выбранный текст, вам нужно будет проверить это с помощью QTextEdit :: textCursor(), который возвращает QTextCursor. Я попытаюсь обновить приведенный выше пример. – Live

+0

Вы правы, но если текст выделен курсивом, и я делаю его полужирным с помощью boldText(), тогда швы этого текста должны быть полужирным шрифтом (и потерять курсив), поскольку я создаю новый объект QTextCharFormat, курсивный параметр которого по умолчанию не является курсивом (то есть ложным). Таким образом, функция cursor.mergeCharFormat() должна также учитывать измененный параметр italic, и thext должен потерять его курсив. Вы согласны? – Narek

Смежные вопросы