Здравствуйте!
Долблюсь щас над простецким визуальным редактором. И вот есть у меня кнопочки форматирования текста в список (в нумерованый и с точечками). И нужно, чтобы при первом нажатии на кнопку, выделенный текст переформатировался в список. А при нажатии на кнопку, если выделенный текст уже был отформатирован в список, нужно чтоб форматирование списком удалялось, и текст становился обычным.
Обработчики кнопок
C++ (Qt)
// Форматирование в нумерованный список
void editor::on_numericlist_clicked(void)
{
format_to_list(QTextListFormat::ListDecimal);
}
// Форматирование в список с точечками
void editor::on_dotlist_clicked(void)
{
format_to_list(QTextListFormat::ListDisc);
}
Сама функция форматирования (textarea - это объект QTextEdit, с которым и идет основная работа)
C++ (Qt)
void editor::format_to_list(QTextListFormat::Style setformat)
{
// Если что-то выбрано
if(textarea->textCursor().hasSelection())
{
if(textarea->textCursor().blockFormat().isListFormat()==false)
{
// Cтроки еще не отформатированы в список, надо отформатировать в список
qDebug() << "Formatting to list";
// Применение форматирования
textarea->textCursor().createList(setformat);
}
else
{
// Строки уже были отформатированы в список, надо форматирование
// сбросить в стандартное
qDebug() << "Remove list formatting";
// Выяснение текущего отступа
int currentindent;
currentindent=(int) textarea->textCursor().blockFormat().leftMargin();
// Создание форматирования
QTextBlockFormat indentformatting;
indentformatting.setLeftMargin(currentindent);
// Форматирование с текущим отступом, при этом форматирование списком удалится
textarea->textCursor().setBlockFormat(indentformatting);
}
}
else
{
// Вставляется первый пустой пункт
textarea->textCursor().insertList(setformat);
}
// Выравнивание прокрутки чтоб курсор был виден если он уехал вниз
textarea->ensureCursorVisible();
}
По идее, при первом нажатии на кнопку, выделенный текст должен форматироваться в список. А при втором нажатии этот список должен превращаться в обычный текст. Но происходит только первая часть - текст форматируется в список. А вот обратно переформатироваться не может (в консоли строки "Remove list formatting" не появляется, все время только "Formatting to list" пишется).
Происходит это потому, что метод
isListFormat() всё время возвращает
false. И вот я не могу понять - почему? Может, я неправильно использую isListFormat()? Багтрекер у троллей вообще не находит ни одного бага с isListFormat. Видимо, метод должен работать правильно. Тогда что я делаю не так?