Поиск:

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


Новичок



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

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



пример напиши как это можно делать.
PM MAIL   Вверх
bsa
Дата 17.5.2011, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
     qreal maxHeight = 0.0;
     for (QTextBlock::iterator it = currentBlock.begin(); !(it.atEnd()); ++it) {
         QTextFragment currentFragment = it.fragment();
         if (currentFragment.isValid())
             maxHeight = qMax(currentFragment.charFormat().fontPointSize(), maxHeight);
     }


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


Новичок



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

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



Это позволит получить все форматы конкетной линии? или всего едита?
PM MAIL   Вверх
bsa
Дата 18.5.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



DK2, срочно проверь /dev/brain (может он выключен) и бегом читать документацию.
PM   Вверх
DK2
Дата 18.5.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



доки на англе, не есть гуд
PM MAIL   Вверх
DK2
Дата 18.5.2011, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



тоесть я пишу так
Код

{
    qreal SizeList = 0.0;
        for( int i = 0; i < ui->textEdit->document()->lineCount(); i++)
    {

    QTextBlock currentBlock = ui->textEdit->document()->findBlockByLineNumber(i);
    qreal maxHeight = 0.0 ;
         for (QTextBlock::iterator it = currentBlock.begin(); !(it.atEnd()); ++it) {
             QTextFragment currentFragment = it.fragment();
             if (currentFragment.isValid())
                 maxHeight = qMax(currentFragment.charFormat().fontPointSize(), maxHeight);
                     }
         ui->textEdit_2->append("строка "+QString::number(i)+" maxHeigth= "+QString::number(maxHeight));
    SizeList = SizeList + maxHeight;
       }
       // qreal x = ui->textEdit->document()->lineCount()*0.2;
        if(SizeList >= ui->textEdit->viewport()->height()) ui->textEdit_2->append(QString::number( ui->textEdit->viewport()->height()-SizeList));
        else QMessageBox::warning(0,"f", QString::number(SizeList) + "  " +QString::number(ui->textEdit->viewport()->height()),1,0);
}


Я правильно понял. Это посчитает мне высоту всех строк?

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


Новичок



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

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



Интересный момент что currentFragment.charFormat().fontPointSize() = 0 , но если вывать сигнал изменения шрифта то он становится равным 8(дефалту)

есть мнения почему так?

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


Новичок



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

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



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


Может  кто подкинет идею как сделдать то что я выше писал???

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


Новичок



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

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



удалось частично решить задуманое так
Код

textedit.viewport().height() < textedit.cursorRect().y() 

работает криво, и не учитывает что пользователь может переставить курсор в середину текстаи дальше продолжать ввод и много другое
буду думать дальше и по презднему жду ваших предложений
PM MAIL   Вверх
DK2
Дата 19.5.2011, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



подскажите как посимвольно перебрать весь текст textedit чтобы получтить его шрифт
PM MAIL   Вверх
xwicked
  Дата 19.5.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DK2 @ 19.5.2011,  15:54)
подскажите как посимвольно перебрать весь текст textedit чтобы получтить его шрифт

Цитата(xwicked @ 15.5.2011,  10:28)
При работе с QTextEdit я парсил html-код в QString. То есть, выгружал нужный участок в переменную типа QString, а потом уже получал / изменял шрифт.

Что выдаёт команда 
Код

$dmesg | grep /dev/brain
? Вы так и не ответили.

Цитата(DK2 @ 16.5.2011,  21:30)
Уважаемый xwicked, пока вы ищите не могли бы сказать в как вы это сделали. Хотя бы на пальцах, чтоб я сам попробывал сделать тоже самое. Так сказал, указать сторону в которую нужно копать.

Хм... Полистал свою тетрадь - нашёл запись(одно слово только  smile ). Что там было конкретно я сейчас не вспомню. Её я сделал где-то 7 месяцев назад. В программе своей я 1-ый способ(расчёт высоты) не реализовал(только что проверил). Поэтому, когда я буду делать следующий релиз своей программы, то добавлю там эту возможность. Протестирую - если всё заработает - отпишусь. Но это будет не раньше, чем через 2-е недели.

Пока пробуйте реализовать парсер html-кода. Потом сможете просто поменять функцию и всё. Намекну: 
Код

QTextEdit te1;
QString str1;
str1 = te1.toHtml();

PM MAIL WWW ICQ   Вверх
DK2
Дата 19.5.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я попробывал следующий код
Код

/*
QList <<QPointer> QPage> Pages;

QPage наследуется от QFrame, имеет свойство QTextEditMod *TextEdit;
QTextEditMod наследник QTextEdit, имеет несколько  переопределеных ****Event();
*/

Pages.value(ActivePage)->TextEdit->document().setPageSize(Pages.value(ActivePage)->TextEdit->viewport()->size());
if (Pages.value(ActivePage)->TextEdit->document()->pageCount()>1)
// вот тут нужно найти лишнее, вырезать это лишние, и вставить либо в новую странуцу(тоесть новый эдит), либо в следующую страницу
// пока не знаю как это сделать


Что главное, работает ровно когда нужно т.е когда идет скролинг. Вставил пока это по сигналу textChanged(), если поставить и на другие сигналы, то будет работать в нужные моменты.

Осталось тока обработать этот процесс( то что написано в комментах).

З.Ы. 
Код
$dmesg | grep /dev/brain // это не понятное сочетание букв мне не о,чем не говорит
 
Однако догадываюсь, что здесь в мягкой формулировке "а подумать головой". Думаю головой я всегда. Но если что не понятно то задаю вопросы, и даже глупые и тупые и еще всякие разные , до тех пор пока не пойму.

З.Ы.Ы парсинг попробую реализовать (как я понял это поиск html тегов и их анализ, с последуюей обработкой), однако это на крайний случай, срок сдачи  близится пока буду своими методами делать, если поможете буду очень благодарен.
PM MAIL   Вверх
xwicked
  Дата 19.5.2011, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(DK2 @ 19.5.2011,  20:33)
Я попробывал следующий код
Код

/*
QList <<QPointer> QPage> Pages;

QPage наследуется от QFrame, имеет свойство QTextEditMod *TextEdit;
QTextEditMod наследник QTextEdit, имеет несколько  переопределеных ****Event();
*/

Pages.value(ActivePage)->TextEdit->document().setPageSize(Pages.value(ActivePage)->TextEdit->viewport()->size());
if (Pages.value(ActivePage)->TextEdit->document()->pageCount()>1)
// вот тут нужно найти лишнее, вырезать это лишние, и вставить либо в новую странуцу(тоесть новый эдит), либо в следующую страницу
// пока не знаю как это сделать


Что главное, работает ровно когда нужно т.е когда идет скролинг. Вставил пока это по сигналу textChanged(), если поставить и на другие сигналы, то будет работать в нужные моменты.

Осталось тока обработать этот процесс( то что написано в комментах). ...

У меня было что-то похожее. Я записал "размер" под этой темой и слёту не вкурил, что я там имел ввиду, так как всё остальное я прогнал в коде и не записал. А вернуться к этому моменту, могу только сейчас - работаю один - и реализация количества мыслей опаздывает на 0.5 - 1 год.

Цитата(DK2 @ 19.5.2011,  20:33)
 ...
З.Ы. 
Код
$dmesg | grep /dev/brain // это не понятное сочетание букв мне не о,чем не говорит
 
Однако догадываюсь, что здесь в мягкой формулировке "а подумать головой". Думаю головой я всегда. Но если что не понятно то задаю вопросы, и даже глупые и тупые и еще всякие разные , до тех пор пока не пойму. ...
 Это можно сказать такая шутка, рассчитанная на линуксоидов. А, если не поставлен улыбающийся смайлик - то воспринимается, как сообщение от красноглазого студента-вендузятнега  smile 
Цитата(DK2 @ 19.5.2011,  20:33)
... З.Ы.Ы парсинг попробую реализовать (как я понял это поиск html тегов и их анализ, с последуюей обработкой), однако это на крайний случай, срок сдачи  близится пока буду своими методами делать, если поможете буду очень благодарен.
У меня у самого сроки  smile - смогу только чуть позже. А парсинг на крайний случай - это верно, так как я его реализовывал для изменения шрифта, а не для разбиения на страницы.
PM MAIL WWW ICQ   Вверх
DK2
Дата 20.5.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Очень срочно.

Подскажите 
 как установить курсор в доке на последний символ
как выделить текст с последнего(n) символа и до  нужного мне (n-2 к примеру)
хочу в цикле выделять текст  сначала тока последний, потом последние 2 , далее последние 3 и т.д
PM MAIL   Вверх
DK2
Дата 20.5.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я делаю так,
Цитата

Текст выделяется перемещением курсора, используя операции, которые похожи на те, что выполняются пользователем в текстовом редакторе. Для выделения текста между двумя точками в документе, нам необходимо установить курсор в первую точку, а затем передвинуть его, используя специальный режим (QTextCursor::MoveMode) с операцией перемещения (QTextCursor::MoveOperation). Когда мы выделяем текст, мы оставляем якорь выделения в старой позиции курсора так же, как пользователь может сделать, удерживая нажатой кнопку Shift при выделении текста.

но не работает, а точнее  ui->textEdit->textCursor().selectedText() = "" 
Код

  if (ui->textEdit->document()->pageCount()>1)
    {

     QTextDocument *doc;
     doc = ui->textEdit->document();
     QTextCursor cursor(doc);
     int count = 0;

     for(int i = 1 ; i <= doc->characterCount(); i++)
       {
           ui->textEdit->textCursor().beginEditBlock();//говорим о начале редактирования

                 //редактируем, т.е ищем лишние , то что выходит за одну страницу
                //1 выделяем это
               //2 и удаляем
              //3 смотрим изменило ли это кол-во страниц
             //4 если да то запоминаем количество лишних символов, выходим их цикла
            //5 если нет отменяем редактирование

           ui->textEdit->textCursor().movePosition(QTextCursor::End);
           ui->textEdit->textCursor().movePosition(QTextCursor::Left,QTextCursor::KeepAnchor,i);
           QDebug(QtDebugMsg)<<cursor.selectedText(); // = "" постоянно пустое
           cursor.selectedText().clear();// это так удаляю выделение, может по другому можно?

          ui->textEdit->textCursor().EndEditBlock();// говорим о конце редактирования

           if (doc->pageCount() ==1 ){
               count = i;//запоминаем
               break;//выходим
           }
           else doc->redo(&cursor);//отменяем удаление
       }
       QDebug(QtDebugMsg)<<count; // =0 значение не меняется от установленого при иницилизации
      
  }



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

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

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


 




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


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

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