Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QTextEdit и несколько выделений фона 
:(
    Опции темы
becks
Дата 13.2.2013, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



Добрый день, коллеги! Нужно выделить несколько участков в тексте разными цветами, делаю так (хочу выделить участок с 5 по 12 символ и с 15 по 19):

Код

QTextEdit *te_context = new QTextEdit(text);

QTextCursor cursor1 = te_context->textCursor();

cursor1.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, 5);
cursor1.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, 12);

QTextCharFormat charFormat1; charFormat1.setBackground(Qt::green);
cursor1.setCharFormat(charFormat1);

te_context->setTextCursor(cursor1);

QTextCursor cursor2 = te_context->textCursor();

cursor1.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, 15);
cursor1.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, 19);

QTextCharFormat charFormat2; charFormat2.setBackground(Qt::blue);
cursor1.setCharFormat(charFormat2);

te_context->setTextCursor(cursor2);

te_context->moveCursor(QTextCursor::End);


В итоге получается, что куски сливаются, т.е. закрашивается синим и пространство между 12 и 15 символами. Не могу понять почему? И правильно ли я делаю, что использую 2 курсора или можно проще? А вдруг нужно было бы выделить различными цветами 1000 кусков в тексте?
Спасибо.

Это сообщение отредактировал(а) becks - 13.2.2013, 11:52
PM MAIL   Вверх
math64
Дата 13.2.2013, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Следи за тем как движется курсор:
Код

int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  QTextEdit edit;
  edit.show();
  QTextDocument* doc = edit.document();
  // Вставим текст
  QTextCursor cursor = edit.textCursor();
  cursor.insertText("Hello World!");
  // Вернём курсор в начало документа
  cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 0);
  edit.setTextCursor(cursor);

  // Выделим Hello и покрасим в зелёный цвет
  QTextCursor cursor = edit.textCursor();
  cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, 5);
  QTextCharFormat charFormat;
  charFormat.setBackground(Qt::green);
  cursor.setCharFormat(charFormat);
  //edit.setTextCursor(cursor); не нужен, курсор редактора остаётся в начале

  // Выделим World и покрасим в синий цвет
  cursor = edit.textCursor();
  cursor.movePosition(QTextCursor::Right, QTextCursor::MoveAnchor, 6);
  cursor.movePosition(QTextCursor::Right, QTextCursor::KeepAnchor, 5);
  charFormat.setBackground(Qt::blue);
  cursor.setCharFormat(charFormat);
  app.exec();
}



Добавлено через 6 минут и 51 секунду
PS: 1000 кусков текста лучше красить у документа, который ещё не присоединён к редактору - чтобы не было лишних перерисовок.
PM   Вверх
becks
Дата 13.2.2013, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 165
Регистрация: 6.7.2010

Репутация: нет
Всего: нет



math64, получилось, большое спасибо. Один вопрос, в этом примере:

Код

QTextDocument* doc = edit.document();


Я правильно понимаю, что изначально вы хотели показать тоже самое, но через документ, и видимо забыли убрать эту строчку?
PM MAIL   Вверх
math64
Дата 14.2.2013, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Переделывал из другого примера. От него осталось. А при большой работе по раскраске лучше работать с документом, а не с виджетом.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.