Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Вопросы по QtextEdit |
Автор: DK2 10.5.2011, 23:26 |
Народ помогите пожайлуста очень нужна помощь. Можно ли узнать количество строк(линий) в QTextEdit? как обратьтся к конкретной строке? Можно ли узнать количество символом в строке QTextEdit? как обратьтся к конкретному символу в строке? Можно ли узнать отступы между строками(лининиями)? А главное можно ли узнать начался ли скролинг в QTextEdit? если событие для этого? Бьюсь уже месяц над этим, пока не работает ничего. |
Автор: DK2 11.5.2011, 19:59 |
Огромное спасибо. Буду побывать. |
Автор: DK2 11.5.2011, 22:07 | ||||
Вопрос
а как получить парамерты шрифта этого символа? |
Автор: xwicked 15.5.2011, 10:28 | ||||||
При работе с QTextEdit я парсил html-код в QString. То есть, выгружал нужный участок в переменную типа QString, а потом уже получал / изменял шрифт. |
Автор: DK2 15.5.2011, 16:10 | ||
Я пробывал выделить нужный символ QTextCursor и из него достать шрифт. Однако выделить то, что нужно, не выходит. Сейчас пробую так
Мне то нужно узнать высоту линии(строки) всего то. Дальше сложить эти высоты + растояния между линиями и узнать выходит ли текст за рамки viewport если да, то лишнее вставить в другой TextEdit. |
Автор: xwicked 15.5.2011, 18:47 | ||
Я уже нашёл как это сделать более простым способом. Где-то записал в своей амбарной книге - надо полистать. Первый способ(как и у Вас), посчитал сильно бородатым - поэтому не стал это в своей программе реализовывать. Найду - отпишусь. |
Автор: DK2 16.5.2011, 01:32 |
Огромное спасибо. Буду ждать. |
Автор: DK2 16.5.2011, 14:58 | ||
Народ вот еще интересный вопрос, касательно печати и обычной и в PDF формате. Как напечатать текст из одного QTextEdit это понятно, а как напечатать одним файлом тектс из разных QTextEdit. К примеру, есть n-ное количество QtextEdit, для нас это будут страницы документа каждый textEdit новая страница. так идет обычная печать в PDF, взял из демо Qt
я пока не сильно разобрался, как это переделать под печать нескольких доков есть мысль, что нужно динамически создать QtextEdit и запихнуть в него текст из всех эдитов, вот как сделать чтобы каждый из этих едитов для принтера был новой страницей??? |
Автор: DK2 16.5.2011, 21:30 |
Уважаемый xwicked, пока вы ищите не могли бы сказать в как вы это сделали. Хотя бы на пальцах, чтоб я сам попробывал сделать тоже самое. Так сказал, указать сторону в которую нужно копать. |
Автор: bsa 16.5.2011, 22:56 |
DK2, в документе находишь нужный блок и получаешь для него формат. Что сложного http://doc.qt.nokia.com/4.7/qtextdocument.html#findBlockByNumber http://doc.qt.nokia.com/4.7/qtextblock.html#charFormat |
Автор: DK2 17.5.2011, 00:04 | ||
Эта операция требует знать индекс блока в документе. Вопрос как узнать номер блока в доке если я могу пока что знаю индекс в конкретной строке? К тому же меня смущает назнание блок! Что это ? Имхо это несколько символов, мне нужет конкретный в линии. |
Автор: bsa 17.5.2011, 10:26 |
DK2, ты как узнал, какая у тебя "линия"? Или тебе нужно просто, узнать размер символа в строке 20 позиции 3? Добавлено через 5 минут и 4 секунды DK2, можешь воспользоваться методом findBlockByLineNumber, а затем используя итерацию между begin()/end() найти формат нужного тебе символа. Но рекомендую научиться читать документацию. Так как имея проблемы с поиском нужных методов путем пролистывания документации на пару строчек вверх, далеко не уедешь. |
Автор: DK2 17.5.2011, 11:45 | ||
именно так. мне нужно перебрать все символы построчно для того чтобы получить высоту линии. З.Ы. рекомендую сначала с темой ознакомится, findBlockByLineNumber мне уже рекомендовали выше |
Автор: bsa 17.5.2011, 11:50 |
DK2, я тебе дал два метода, которые тебе позволят не перебирать все символы. А перебрать все форматы символов строки. Их, в общем случае, меньше, чем символов. |
Автор: DK2 17.5.2011, 20:32 |
пример напиши как это можно делать. |
Автор: bsa 17.5.2011, 23:10 | ||
|
Автор: DK2 18.5.2011, 01:54 |
Это позволит получить все форматы конкетной линии? или всего едита? |
Автор: bsa 18.5.2011, 13:18 |
DK2, срочно проверь /dev/brain (может он выключен) и бегом читать документацию. |
Автор: DK2 18.5.2011, 17:41 |
доки на англе, не есть гуд |
Автор: DK2 18.5.2011, 18:14 | ||
тоесть я пишу так
Я правильно понял. Это посчитает мне высоту всех строк? |
Автор: DK2 18.5.2011, 21:23 |
Интересный момент что currentFragment.charFormat().fontPointSize() = 0 , но если вывать сигнал изменения шрифта то он становится равным 8(дефалту) есть мнения почему так? |
Автор: DK2 18.5.2011, 22:20 |
Полный пипец. Только узнал, что линия - это блок текста прерывающийся переносом каретки(после нажатия Enter) или концом документа. Это мне не подходит. У меня линий это одна строчка в заканчивающаяся границами холста а не спец символами. Может кто подкинет идею как сделдать то что я выше писал??? |
Автор: DK2 19.5.2011, 00:42 | ||
удалось частично решить задуманое так
работает криво, и не учитывает что пользователь может переставить курсор в середину текстаи дальше продолжать ввод и много другое буду думать дальше и по презднему жду ваших предложений |
Автор: DK2 19.5.2011, 15:54 |
подскажите как посимвольно перебрать весь текст textedit чтобы получтить его шрифт |
Автор: xwicked 19.5.2011, 17:51 | ||||||||||
Что выдаёт команда
Хм... Полистал свою тетрадь - нашёл запись(одно слово только ![]() Пока пробуйте реализовать парсер html-кода. Потом сможете просто поменять функцию и всё. Намекну:
|
Автор: DK2 19.5.2011, 20:33 | ||||
Я попробывал следующий код
Что главное, работает ровно когда нужно т.е когда идет скролинг. Вставил пока это по сигналу textChanged(), если поставить и на другие сигналы, то будет работать в нужные моменты. Осталось тока обработать этот процесс( то что написано в комментах). З.Ы.
Однако догадываюсь, что здесь в мягкой формулировке "а подумать головой". Думаю головой я всегда. Но если что не понятно то задаю вопросы, и даже глупые и тупые и еще всякие разные , до тех пор пока не пойму. З.Ы.Ы парсинг попробую реализовать (как я понял это поиск html тегов и их анализ, с последуюей обработкой), однако это на крайний случай, срок сдачи близится пока буду своими методами делать, если поможете буду очень благодарен. |
Автор: xwicked 19.5.2011, 21:09 | ||||||||||
У меня было что-то похожее. Я записал "размер" под этой темой и слёту не вкурил, что я там имел ввиду, так как всё остальное я прогнал в коде и не записал. А вернуться к этому моменту, могу только сейчас - работаю один - и реализация количества мыслей опаздывает на 0.5 - 1 год.
![]()
![]() |
Автор: DK2 20.5.2011, 15:37 |
Очень срочно. Подскажите как установить курсор в доке на последний символ как выделить текст с последнего(n) символа и до нужного мне (n-2 к примеру) хочу в цикле выделять текст сначала тока последний, потом последние 2 , далее последние 3 и т.д |
Автор: DK2 20.5.2011, 17:21 | ||||
я делаю так,
но не работает, а точнее ui->textEdit->textCursor().selectedText() = ""
|
Автор: DK2 20.5.2011, 21:59 | ||
Так как я еще не достаточно хорошо знаю и С++ и Qt не могли бы Вы мне помочь с записью алгоритма. Я составлю шаблон и комменты что и где-то дожно считаться и т.д. , а Вы запишите это как надо в Qt.
З.Ы. если смысл создавать динамический QtextEdit чтобы в нем впроводить эти действия, чтобы они не отображались на текущем чтоб тозмозов из-за отрисовки не было? |
Автор: DK2 21.5.2011, 18:06 | ||
Ура вроде бы работает. Тока один глюк есть. Когда лишнее вырезается то оно должно вставится в следующий эдит, в начала эдита. Однако вставляется в конец, что не есть гуд.
это код не ставит курсор в начала текста вырезаный фрагмент оказывается в конце, как поставить курсор куда нужно? |
Автор: bsa 22.5.2011, 22:39 |
А по мне, так самый что ни на есть гут - китайский или хинди учить не надо. Запомни, в программировании доки на русском почти нет. Если у какой-то либы нет доки на английском, дорога в жизнь ей заказана. Поэтому, если не очень стар - УЧИ АНГЛИЙСКИЙ!!! |
Автор: DK2 25.5.2011, 23:21 | ||||
Итак народ, мне все-таки удалось решить эту задачу. Решил отписатся для тех кому интересно или кто захочет сделать тоже самое. Предупреждаю заранее, код придется редактировать под себя. Суть в том, что я создал слот для обработки сигнала textChanged() это заголовочный файл тут видно что я слдот прикрутил
ссылки на сорсы класса http://narod.ru/disk/16136280001/qmultipagetextarea.h.html http://narod.ru/disk/16136198001/qmultipagetextarea.cpp.html |