Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопросы по QtextEdit, интересные вопросы по QTextEdit 
:(
    Опции темы
DK2
Дата 10.5.2011, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Народ помогите пожайлуста очень нужна помощь.

Можно ли узнать количество строк(линий) в QTextEdit? как обратьтся к конкретной строке?
Можно ли узнать количество символом в строке QTextEdit? как обратьтся к конкретному символу в строке?
Можно ли узнать отступы между строками(лининиями)?

А главное можно ли узнать начался ли скролинг в QTextEdit? если событие для этого?

Бьюсь уже месяц над этим, пока не работает ничего.








PM MAIL   Вверх
borisbn
Дата 11.5.2011, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(DK2 @  10.5.2011,  23:26 Найти цитируемый пост)
Можно ли узнать количество строк(линий) в QTextEdit?

Код

textEdit->document()->lineCount();


Цитата(DK2 @  10.5.2011,  23:26 Найти цитируемый пост)
как обратьтся к конкретной строке?

Код

textEdit->document()->findBlockByLineNumber( lineNumber );

Цитата(DK2 @  10.5.2011,  23:26 Найти цитируемый пост)
Можно ли узнать количество символом в строке QTextEdit?

Код

textEdit->document()->findBlockByLineNumber( lineNumber ).text().length();

Цитата(DK2 @  10.5.2011,  23:26 Найти цитируемый пост)
как обратьтся к конкретному символу в строке?

Код

textEdit->document()->findBlockByLineNumber( lineNumber ).text().at( columnIdx );

Цитата(DK2 @  10.5.2011,  23:26 Найти цитируемый пост)
А главное можно ли узнать начался ли скролинг в QTextEdit? если событие для этого?

Цитата

void QTextDocument::documentLayoutChanged ()   [signal]

правда, не проверял...
Цитата(DK2 @  10.5.2011,  23:26 Найти цитируемый пост)
Можно ли узнать отступы между строками(лининиями)?

см.
Цитата

QTextBlockFormat QTextBlock::blockFormat () const



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
DK2
Дата 11.5.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Огромное спасибо. Буду побывать.
PM MAIL   Вверх
DK2
Дата 11.5.2011, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Вопрос

Цитата

как обратьтся к конкретному символу в строке?


Код

textEdit->document()->findBlockByLineNumber( lineNumber ).text().at( columnIdx );


а как получить парамерты шрифта этого символа?


Это сообщение отредактировал(а) DK2 - 11.5.2011, 22:08
PM MAIL   Вверх
xwicked
  Дата 15.5.2011, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 9.4.2010
Где: Старый Оскол

Репутация: 1
Всего: 1



Цитата(DK2 @ 11.5.2011,  22:07)
Вопрос

Цитата

как обратьтся к конкретному символу в строке?


Код

textEdit->document()->findBlockByLineNumber( lineNumber ).text().at( columnIdx );


а как получить парамерты шрифта этого символа?

При работе с QTextEdit я парсил html-код в QString. То есть, выгружал нужный участок в переменную типа QString, а потом уже получал / изменял шрифт.
PM MAIL WWW ICQ   Вверх
DK2
Дата 15.5.2011, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Я пробывал выделить нужный символ QTextCursor и из него достать шрифт. Однако выделить то, что нужно, не выходит. Сейчас пробую   так
Код

textEdit->document()->findBlockByLineNumber( lineNumber )->charFormat.font();

Мне то нужно узнать высоту линии(строки) всего то. Дальше сложить эти высоты + растояния между линиями и узнать выходит ли текст за рамки viewport если да, то лишнее вставить в другой TextEdit.

Это сообщение отредактировал(а) DK2 - 15.5.2011, 16:10
PM MAIL   Вверх
xwicked
  Дата 15.5.2011, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 9.4.2010
Где: Старый Оскол

Репутация: 1
Всего: 1



Цитата(DK2 @ 15.5.2011,  16:10)
...
Мне то нужно узнать высоту линии(строки) всего то. Дальше сложить эти высоты + растояния между линиями и узнать выходит ли текст за рамки viewport если да, то лишнее вставить в другой TextEdit.

Я уже нашёл как это сделать более простым способом. Где-то записал в своей амбарной книге - надо полистать.
Первый способ(как и у Вас), посчитал сильно бородатым - поэтому не стал это в своей программе реализовывать.
Найду - отпишусь.

Это сообщение отредактировал(а) xwicked - 15.5.2011, 18:51
PM MAIL WWW ICQ   Вверх
DK2
Дата 16.5.2011, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Огромное спасибо. Буду ждать.
PM MAIL   Вверх
DK2
Дата 16.5.2011, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Народ вот еще интересный вопрос, касательно печати и обычной и в PDF формате. 
Как напечатать текст из одного QTextEdit это понятно, а как напечатать одним файлом тектс из разных QTextEdit.
К примеру, есть n-ное количество QtextEdit, для нас это будут страницы документа каждый textEdit новая страница.

так идет обычная печать в PDF, взял из демо Qt

Код

#ifndef QT_NO_PRINTER // что это точно не знаю, имхо инструкции для конпилятора типа "если есть принтер"
    QPrinter printer(QPrinter::HighResolution); // создаем принтер
    QPrintDialog *dlg = new QPrintDialog(&printer, this); // прин диалог вызываем
    if (ui->textEdit->textCursor().hasSelection()) //если выделено что то
        dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);// печатать выделеное
    dlg->setWindowTitle(tr("Print Document"));//заголовок диалогу ставим
    if (dlg->exec() == QDialog::Accepted) {// если назали ок
        ui->textEdit->print(&printer);//печатаем textEdit
    }
    delete dlg; //осбодождаем память
#endif


я пока не сильно разобрался, как это переделать под  печать нескольких доков
есть мысль, что нужно динамически создать QtextEdit и запихнуть в него текст из всех эдитов, вот как сделать чтобы каждый из этих 
едитов для принтера был новой страницей???

Это сообщение отредактировал(а) DK2 - 16.5.2011, 22:28
PM MAIL   Вверх
DK2
Дата 16.5.2011, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Уважаемый xwicked, пока вы ищите не могли бы сказать в как вы это сделали. Хотя бы на пальцах, чтоб я сам попробывал сделать тоже самое. Так сказал, указать сторону в которую нужно копать.

Это сообщение отредактировал(а) DK2 - 16.5.2011, 23:54
PM MAIL   Вверх
bsa
Дата 16.5.2011, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



DK2, в документе находишь нужный блок и получаешь для него формат. Что сложного
http://doc.qt.nokia.com/4.7/qtextdocument....ndBlockByNumber
http://doc.qt.nokia.com/4.7/qtextblock.html#charFormat
PM   Вверх
DK2
Дата 17.5.2011, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Код

textEdit.document.findBlockByNumber(int index)


Эта операция требует знать индекс блока в документе. Вопрос как узнать номер блока в доке если я могу пока что знаю индекс в конкретной строке?
К тому же меня смущает назнание блок! Что это ? Имхо это несколько символов, мне нужет конкретный в линии.

Это сообщение отредактировал(а) DK2 - 17.5.2011, 00:05
PM MAIL   Вверх
bsa
Дата 17.5.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



DK2, ты как узнал, какая у тебя "линия"? Или тебе нужно просто, узнать размер символа в строке 20 позиции 3?

Добавлено через 5 минут и 4 секунды
DK2, можешь воспользоваться методом findBlockByLineNumber, а затем используя итерацию между begin()/end() найти формат нужного тебе символа. Но рекомендую научиться читать документацию. Так как имея проблемы с поиском нужных методов путем пролистывания документации на пару строчек вверх, далеко не уедешь.
PM   Вверх
DK2
Дата 17.5.2011, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 8.3.2011

Репутация: нет
Всего: нет



Цитата

DK2, ты как узнал, какая у тебя "линия"? Или тебе нужно просто, узнать размер символа в строке 20 позиции 3?

именно так. мне нужно перебрать все символы построчно для того чтобы получить высоту линии.

З.Ы. рекомендую сначала с темой ознакомится, findBlockByLineNumber мне уже рекомендовали выше  
PM MAIL   Вверх
bsa
Дата 17.5.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



DK2, я тебе дал два метода, которые тебе позволят не перебирать все символы. А перебрать все форматы символов строки. Их, в общем случае, меньше, чем символов.

Это сообщение отредактировал(а) bsa - 17.5.2011, 11:51
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0967 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.