Russian Qt Forum
Ноябрь 25, 2024, 02:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Толи isListFormat() гючит, толи я не понял документацию...  (Прочитано 2710 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Март 12, 2009, 16:58 »

Здравствуйте!


Долблюсь щас над простецким визуальным редактором. И вот есть у меня кнопочки форматирования текста в список (в нумерованый и с точечками). И нужно, чтобы при первом нажатии на кнопку, выделенный текст переформатировался в список. А при нажатии на кнопку, если выделенный текст уже был отформатирован в список, нужно чтоб форматирование списком удалялось, и текст становился обычным.

Обработчики кнопок

Код
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. Видимо, метод должен работать правильно. Тогда что я делаю не так?
 
 
« Последнее редактирование: Март 12, 2009, 17:22 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
EhTemka
Гость
« Ответ #1 : Март 12, 2009, 17:44 »

Попробуй вот этой функцией воспользоваться при проверке

 
Код:
QTextList * QTextCursor::currentList ()
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Март 12, 2009, 18:07 »

Спасиба, получилось.

А что с isListFormat()? Имеем баг?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 22.