Название: как сохранить позицию anchor в QTextEdit? Отправлено: maybell от Июль 17, 2008, 11:21 Необходимо запомнить позицию якоря в поле TextEdit и после неких манипуляций (например:выделение->вырезание->вставка текста) якорь должен встать на ту позицию, в которую был поставлен до этих операций. В QT я новичок, удалось только расставить кнопки и настроить действия выделения, вырезки и вставки. А вот как работать с курсором? Копания в ассистенте не очень помогают пробовались манипуляции типа Код: void Worktest::DragText() но ничего не происходит.. может, кто-то поможет разобраться? ps.Qt 4.1.2 worktest.h http://www.everfall.com/paste/id.php?3dcdl96tggc6 (http://www.everfall.com/paste/id.php?3dcdl96tggc6) worktest.cpp http://www.everfall.com/paste/id.php?7tgbj0xls9ii (http://www.everfall.com/paste/id.php?7tgbj0xls9ii) main.cpp http://www.everfall.com/paste/id.php?n4g2c4kuzo96 (http://www.everfall.com/paste/id.php?n4g2c4kuzo96) Название: Re: как сохранить позицию anchor в QTextEdit? Отправлено: spirit от Июль 17, 2008, 12:12 вот простенький примерчик (немного поправил ваш пример):
Код: Worktest::Worktest(QWidget *parent) Название: Re: как сохранить позицию anchor в QTextEdit? Отправлено: Red Devil от Июль 17, 2008, 13:02 Это не так легко как кажется не первый вгляд.
Что нужно сделать чтобы установить курсор, например, в ситуации приведенной тобой (выделение->вырезание->вставка текста). Тебе нужно запомнить позицию начала выделения (selectionStart), перед вырезанием. Теперь наступает самое сложно - нужно во время действий пользователя узнавать смещение. Ведь вставить текст пользователь может до/после той позиции, которая была выделена. Кроме того он еще может свой текст добавить/удалить, опять же и перед и после позиции курсора. Если после позиции курсора - то тебе это не помешает, а вот если до - то нужно изменить позицию якоря относительно того добавили ли символы или удалили их. Для этого тебе наверное скорее всего подойдет сигнал : Цитировать void QTextDocument::contentsChange ( int position, int charsRemoved, int charsAdded ) [signal] Тебе нужно сравнить position с той position, которую ты сохранил и если меньша или равна, то соотвенно добавить к твоей позиции charsAdded и отнять от нее charsRemoved.This signal is emitted whenever the document's content changes; for example, when text is inserted or deleted, or when formatting is applied. Information is provided about the position of the character in the document where the change occurred, the number of characters removed (charsRemoved), and the number of characters added (charsAdded). The signal is emitted before the document's layout manager is notified about the change. This hook allows you to implement syntax highlighting for the document. See also QAbstractTextDocumentLayout::documentChanged() and contentsChanged() Название: Re: как сохранить позицию anchor в QTextEdit? Отправлено: maybell от Июль 17, 2008, 13:54 вот простенький примерчик (немного поправил ваш пример): Благодарю за пример, все прекрасно работает. По крайней мере так как пока необходимо) Что нужно сделать чтобы установить курсор, например, в ситуации приведенной тобой (выделение->вырезание->вставка текста). Тебе нужно запомнить позицию начала выделения (selectionStart), перед вырезанием. Теперь наступает самое сложно - нужно во время действий пользователя узнавать смещение. Ведь вставить текст пользователь может до/после той позиции, которая была выделена. Кроме того он еще может свой текст добавить/удалить, опять же и перед и после позиции курсора. Если после позиции курсора - то тебе это не помешает, а вот если до - то нужно изменить позицию якоря относительно того добавили ли символы или удалили их. Спасибо за подсказку, буду над этим работать о_О |