Название: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: xintrea от Март 15, 2009, 22:10 Здравствуйте!
Что-то не могу разобраться.. Как в QTextEdit можно получить в виде QString выделенный текст? Интересует получение plain текста, и rich текста в HTML разметке. И второй вопрос - нужно выяснить, есть ли в выделенном куске текст, отформатированный разным шрифтом и разным размером. Как это сделать? Парсить HTML-код посимвольно? Или возможно какое-то "быстрое" вычленение возможных шрифтов и размеров? Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: spirit от Март 15, 2009, 22:14 Здравствуйте! Что-то не могу разобраться.. Как в QTextEdit можно получить в виде QString выделенный текст? Интересует получение plain текста, и rich текста в HTML разметке. Цитировать QString QTextCursor::selectedText () const по второму вопросу вот это должно подойтиQTextDocumentFragment QTextCursor::selection () const Цитировать QTextCharFormat QTextCursor::blockCharFormat () const Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: xintrea от Март 15, 2009, 22:54 Спасиба, с первым вопросом разобрался.
по второму вопросу вот это должно подойти Цитировать QTextCharFormat QTextCursor::blockCharFormat () const А вот с этим понять не могу. Читаю описание класса QTextCharFormat, неясно с форматом чего этот класс работает? Вроде как с форматом отдельного символа. Но какого конкретно? Что значит blockCharFormat()? Курсором выделен кусок текста, мы для куска текста (не для символа!) получаем QTextCharFormat... Что данный объект формата содержит? Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: xintrea от Март 16, 2009, 00:57 Не, абстракция QTextCharFormat выше моего понимания.
Как с помощью неё вычленять возможные шрифты и размеры из куска текста, понять тем более не могу. QTextCharFormat можно работать с куском текста как с отдельной сущностью, но не могу найти методов, которые бы залазили внутрь этого куска (непример, текст разбивался бы на подкуски по каким-то признакам). В уверены, что QTextCharFormat QTextCursor::blockCharFormat() это то что нужно? Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: Magvaj от Март 16, 2009, 09:02 Это то, что нужно. Он показывает формат для отдельных блоков документа. Сам QtextEdit вроде с блоками не работает, зато можно сделать QTextEdit::document(). Получишь указатель на QTextDocument, который уже работает с блоками.
Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: spirit от Март 16, 2009, 09:25 все что нужно для шрифта
Цитировать QFont font () const в курсоре есть метод QTextBlock QTextCursor::block () const,QFont::Capitalization fontCapitalization () const QString fontFamily () const bool QTextCharFormat::fontFixedPitch () const bool QTextCharFormat::fontItalic () const bool QTextCharFormat::fontKerning () const qreal QTextCharFormat::fontLetterSpacing () const bool QTextCharFormat::fontOverline () const qreal QTextCharFormat::fontPointSize () const bool QTextCharFormat::fontStrikeOut () const QFont::StyleHint QTextCharFormat::fontStyleHint () const QFont::StyleStrategy QTextCharFormat::fontStyleStrategy () const bool QTextCharFormat::fontUnderline () const int QTextCharFormat::fontWeight () const qreal QTextCharFormat::fontWordSpacing () const в блоке есть метод QTextBlockFormat blockFormat () const. ходить по блокам можно через итератор, см. Цитировать iterator QTextBlock::begin () const PS. все что надо, есть в доке. ;)iterator QTextBlock::end () const QTextBlock QTextBlock::next () const QTextBlock QTextBlock::previous () const Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: xintrea от Март 16, 2009, 15:21 Цитировать в курсоре есть метод QTextBlock QTextCursor::block () const, в блоке есть метод QTextBlockFormat blockFormat () const. ходить по блокам можно через итератор Я вот чего понять не могу. Блок - это, грубо говоря, часть текста между тегами <p>...</p>. В QTextEdit это от начала строки до переноса строки. Если в этой строке одно слово выделить другим шрифтом, то block() не видит, что имеем 3 блока (например, "Arial", "Courier", "Arial"). Это все считается одним блоком, так как слово выделено не через <p>, а через <span>, вот так например Код: <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> И вот не могу разобраться, как же через блоки и ихние итераторы вычленить форматирование разными шрифтами, если отдельное форматирование не выделено в отдельный блок? Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: Rcus от Март 16, 2009, 15:52 Код
Код: QFont( "Arial,12,-1,5,50,0,0,0,0,0" ) Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: xintrea от Март 16, 2009, 16:53 Код: [quote author=Rcus link=topic=8877.msg49915#msg49915 date=1237207922] [/quote] Так конечно, можно, и оно даже работает (вопрос правда с какой скоростью если текст длинный, ведь вызываться парсинг будет при каждом перемещении курсора в режиме выделения). Я думал, что есть какая-то метода, с помощью которой быстро (в нашем случе) по <span> можно будет проскакать, а не проверять каждый символ. Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: xintrea от Март 16, 2009, 17:46 Пока реализую выборку посимвольно, но уже подумываю парсить кусок через SAX... Но как-то это неправильно...
Название: Re: QTextEdit - как получить выделенный в данный момент текст? И еще один вопрос.. Отправлено: spirit от Март 16, 2009, 18:11 Пока реализую выборку посимвольно, но уже подумываю парсить кусок через SAX... Но как-то это неправильно... имхо, вообще ничего не выиграешь. зачем колесо изобретать? :) |