Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Day от Май 23, 2013, 20:09



Название: Как в QTextEdit определить строку и позицию курсора
Отправлено: Day от Май 23, 2013, 20:09
Ведь методы QTextCursor дают позицию в длинном QString, и что же, каждый раз пересчитывать количество переводов строки до этой позиции?
Скорее всего я чего-то не понимаю.
Просветите кто чем может.


Название: Re: Как в QTextEdit определить строку и позицию курсора
Отправлено: Mikhail от Май 23, 2013, 22:17
А что в этом сложного?


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

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


Название: Re: Как в QTextEdit определить строку и позицию курсора
Отправлено: Day от Июнь 18, 2013, 13:48
Mikhail, благодарю за наводку и приношу извинения за столь длительную задержку ответа - в нашей деревне совсем дрянной интернет и не установлен Qt.
А не могли бы вы, если не сложно, привести маленький пример. Или ссылку.
Не очень понятно, при чем здесь QTextBlock, ведь у меня может не быть вовсе никакого выделенного блока.
И еще, методы position(), positionInBlock()  дают int, а мне надо бы получить 2 int-а - плоскостные координаты.
Заранее благодарен за любой ответ.


Название: Re: Как в QTextEdit определить строку и позицию курсора
Отправлено: Mikhail от Июнь 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.

А вообще это все очень подробно описано в ассистенте.


Название: Re: Как в QTextEdit определить строку и позицию курсора
Отправлено: Day от Июнь 18, 2013, 15:28
Спасибо!
Что QTextDocumett состоит из QTextBlock-ов, я читал, но как-то не привязал к своей "проблеме"
Буду пробовать...


Название: Re: Как в QTextEdit определить строку и позицию курсора
Отправлено: Mikhail от Июнь 18, 2013, 16:02
Надо читать документацию -assistant тебе в помощь


Название: Re: Как в QTextEdit определить строку и позицию курсора
Отправлено: Day от Сентябрь 26, 2013, 12:39
Код:
  QTextCursor cur = textCursor();
  int line = cur.blockNumber();
  qDebug() << line;
(перенос строк выключен)