LINUX.ORG.RU

Кастомное выделение текста в Qt.


0

1

Интересует тема, так сказать, «движков выделения текста».

Текст можно вывести многими способами - QLabel, QPaint::drawText, может что-то ещё. Можно отрендерить в QPixmap и потом выводить этот QPixmap куда надо.

Речь НЕ о разработке текстового редактора. Нужно показать текст и дать возможность привязывать к разным его частям другие текстовые блоки. Графически это будет выглядеть примерно так: http://savepic.net/1826687.png

Возникает потребность дать пользователю выделять текст. Выделение должно быть достаточно необычным - например удерживая CTRL выделить сразу несколько кусков, или двойной клик по слову - выделяет всё слово.

В разных текстовых редакторах выделение работает по-разному, значит люди как-то добираются своими руками до выделения текста. В разных браузерах выделение текста тоже работает по-разному. Не только разная подсветка фона, но и разные особенности поведения этого «выделятора» в сложной обстановке - по соседству с картинками, таблицами, по отношению ко всяким там сложным элементам разметки и т.п.

В общем хочется как-то добраться до контроля за выделением текста. Какие есть варианты? Шрифты сложны и танки наши быстры - каждая отрендеренная строка текста - это не последовательный набор символов разной ширины, это, бывает, ещё и всякое межсимвольное взаимодействие. Я не шарю. Всякие там кёрнинги, хинтинги и т.п.

Поэтому наверное не получится отрендерить алфавит в 33 разных QPixmap и выводить ими текст самостоятельно с целью знать позицию каждого символа, чтобы точно подсвечивать под ним фон при движении нажатой мыши.

Надеюсь, проблема ясна. Задавайте вопросы.

Нужно показать текст

QTextEdit

и дать возможность привязывать к разным его частям другие текстовые блоки.

Следи за выделением текста с помощью QTextEdit::selectionChanged().

Задавайте вопросы

В чем сложности-то?

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

А можно сделать так, чтобы QTextEdit показывал текст без поля ввода, без скролл-баров (если текст не влезает), выделял несколько кусков текста с одним нажатием CTRL и выдавал графические координаты каждого выделенного куска в отдельности?

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

> текст без поля ввода
Думаю, такого вида можно добиться css'ом. Если нет, то наследуй и рендерь сам.

без скролл-баров

http://doc.qt.nokia.com/latest/qabstractscrollarea.html#horizontalScrollBarPo...
http://doc.qt.nokia.com/latest/qt.html#ScrollBarPolicy-enum

выделял несколько кусков текста с одним нажатием CTRL

выдавал графические координаты каждого


Вот это тебе придется реализовывать самому точно. Но это не должно быть сильно сложно.

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

> несколько кусков текста

Несколько кусков текста все-таки нельзя выделить по-настоящему. Но ты можешь следить за изменением выделения и подсвечивать нужные тебе куски текста с помощью, например, html'a или собственного QSyntaxHighlighter'а.

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