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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QTextEdit определить строку и позицию курсора  (Прочитано 7743 раз)
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« : Май 23, 2013, 20:09 »

Ведь методы QTextCursor дают позицию в длинном QString, и что же, каждый раз пересчитывать количество переводов строки до этой позиции?
Скорее всего я чего-то не понимаю.
Просветите кто чем может.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Май 23, 2013, 22:17 »

А что в этом сложного?


Используй
QTextBlock block() const
int position() const
int positionInBlock() const

и учти что строка и блок текста разные вещи.
В блоке может быть несколько строк.
А пересчет можно сделать в слоте связанном с сигналом
void QTextDocument::cursorPositionChanged(const QTextCursor & cursor) [signal]
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #2 : Июнь 18, 2013, 13:48 »

Mikhail, благодарю за наводку и приношу извинения за столь длительную задержку ответа - в нашей деревне совсем дрянной интернет и не установлен Qt.
А не могли бы вы, если не сложно, привести маленький пример. Или ссылку.
Не очень понятно, при чем здесь QTextBlock, ведь у меня может не быть вовсе никакого выделенного блока.
И еще, методы position(), positionInBlock()  дают int, а мне надо бы получить 2 int-а - плоскостные координаты.
Заранее благодарен за любой ответ.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Июнь 18, 2013, 14:41 »

У тебя может не быть выделенного блока.

QTextEdit предназначен для отображения документа, который содержится в QTextDocument.
Смотри assistant по этим классам и ты увидишь, что QTextDocument состоит из QTextBlock. QTextBlock содержит блок текста до символа перевода строки.
метод position() определяет расположение курсора в QTextDocument.
метод positionInBlock() определяет расположение курсора в QTextBlock.
Методом расчета мжно определить сколько символов  каждом блоке-строке.
и какая позиция курсора в блоке на который установлен курсор.
Учти, что текст в QTextBlock может занимать несколько визуальных строк.
Здесь поможет

textWidth : qreal
он определяет ширину текста.

The text width specifies the preferred width for text in the document. If the text (or content in general) is wider than the specified with it is broken into multiple lines and grows vertically. If the text cannot be broken into multiple lines to fit into the specified text width it will be larger and the size() and the idealWidth() property will reflect that.

А вообще это все очень подробно описано в ассистенте.
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #4 : Июнь 18, 2013, 15:28 »

Спасибо!
Что QTextDocumett состоит из QTextBlock-ов, я читал, но как-то не привязал к своей "проблеме"
Буду пробовать...
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Июнь 18, 2013, 16:02 »

Надо читать документацию -assistant тебе в помощь
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #6 : Сентябрь 26, 2013, 12:39 »

Код:
  QTextCursor cur = textCursor();
  int line = cur.blockNumber();
  qDebug() << line;
(перенос строк выключен)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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