LINUX.ORG.RU

Qt4 - как сделать отступ в редактируемом тексте?


0

0

Чота туплю я. Qt4.

Есть объект qtexteditarea класса QTextEdit. В момент редактирования, к выделенному фрагменту текста я могу применять всякие преобразования - ну например сделать курсив, или утолщение шрифта, типа вот так

qtexteditarea->setFontItalic(true);

Я это могу сделать потому, что функции типа setFontItalic(), setFontWeight() являются методами класса QTextEdit.

И теперь мне нужно понять, как устанавливать, к примеру, левый отступ к выделенному абзацу. Есть такой метод - setIndent(indentation). Но он является методом класса QTextBlockFormat, родитель которого - QTextFormat, который совершенно непонятно как относится к классу QTextEdit.

Вопрос прост - как сделать отступ выделенного абзаца в QTextEdit?


Ответ на: комментарий от UVV

От спасибо. Так и сделал, заработало

void DialogImpl::on_editindentplus_clicked(void)
{
int currentindent;

// Выяснение текущего отступа
currentindent=(int) edittextarea->textCursor().blockFormat().leftMargin();

// Создание форматирования
QTextBlockFormat indentformatting;
indentformatting.setLeftMargin(currentindent+10); // setTextIndent(10);

// Форматирование
edittextarea->textCursor().setBlockFormat(indentformatting);
}


И еще один вопрос возник - как выделенные абзацы отформатировать в список (нумерованный или там с точечками)? У меня действительно туго с англицким, QtAssisant мало помогает, сложно понять их объектную модель.

xintrea
() автор топика
Ответ на: комментарий от xintrea

А, все, нашел. Оказывается, на сайте Qt документация более полная чем в QtAssistant. На сайте те же страницы документации, что и в ассистенте, содержат заодно и примеры.

Получилось так

void DialogImpl::on_editnumericlist_clicked(void) { // Создание форматирования QTextListFormat format; format.setStyle(QTextListFormat::ListDecimal);

// Форматирование edittextarea->textCursor().createList(format); }

И снова вопрос - существует ли в природе готовый example текстового редактора на Qt с форматированием текста а ля виндовый Wordpad ? Нигде пока не нашел. Если известно - подскажите плиз ссылку.

xintrea
() автор топика
Ответ на: комментарий от xintrea

> И снова вопрос - существует ли в природе готовый example текстового редактора на Qt с форматированием текста а ля виндовый Wordpad ? Нигде пока не нашел. Если известно - подскажите плиз ссылку.
Ну дык $QTDIR/demos/textedit
;)
Правда всё форматирование там реализовано средствами html

UVV ★★★★★
()
Ответ на: комментарий от xintrea

> У меня действительно туго с англицким, QtAssisant мало помогает, сложно понять их объектную модель.
Это ты зря. Assistant - действительно классная вещь!
А английский стоит подучить, т.к. всю новую документацию пишут на нём.

UVV ★★★★★
()
Ответ на: комментарий от UVV

Ну коль пошла такая пьянка, вот еще вопрос. Задал его здесь http://www.forum.crossplatform.ru/index.php?s=2c69692cdd53a8c7b9d6fcee42b5eb6..., пока ответов нет.

Сделал значит область edittextarea класса QTextEdit. Сделал кнопочку создания нумерованного списка, она выполняет такие действия


// Форматирование в нумерованный список
void DialogImpl::on_editnumericlist_clicked(void)
{
// Создание форматирования
QTextListFormat format;
format.setStyle(QTextListFormat::ListDecimal);

// Если строки выбраны
if(edittextarea->textCursor().hasSelection())
edittextarea->textCursor().createList(format); // Форматирование
else
edittextarea->textCursor().insertList(format); // Вставляется первый пустой пункт
}


Проблема в том, что если курсор находится внизу редактируемой области, и если добавляется первый пустой пункт списка, то этот пункт добавляется ниже, чем пределы редактируемой области. То есть не видно ни только что созданный пункт, ни курсор. Но если промотать скроллинг чуть-чуть вниз, то видно и курсор, и новый добавленый пункт.

Вопрос - как сделать перемещение скроллинга к тому месту, где находится курсор?

Ммент такой есть - вызывать команду передвижения скролла к концу текста не предлагать, ибо такая ситуация возникает и в середине текста (т.е. "внизу окна редактирования"!="внизу текста").

xintrea
() автор топика
Ответ на: комментарий от xintrea

Решение нашел, но сутки потерял. Хотел уже с Qt4.2 на Qt4.4 обновляться.

Решение такое. Чтобы переместиться к курсору, надо воспользоваться методом ensureCursorVisible(). Этот метод проверяет, виден ли курсор, и сдвигает прокрутку так, чтоб курсор был виден.

xintrea
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.