Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убрать тег (переход на новую строку) в Html!!! 
:(
    Опции темы
GianSteps
Дата 8.6.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ПРивет всем!!!
возникла такая задачка!!!! 
есть TextEdit в котором набираю текст, который в подальшос надо прорисовать в файл одной строкой (отформатированный так-как есть).
С прорисовкой и форматированием разобрался. Проблема в след. Если я набираю текс и в нем присутствует абзац (тоетсь переход на новую строку) то в конечном результате нужно что-бы  файл  прорисовался одной строкой.
вот код:
Код

void MyWidget::previewbutton()
{
 
    document = new QTextDocument;

   // document = textEdit->document();

    QString string;
    QString newstring;
    string = textEdit->toHtml();
    qDebug()<<string;
////////////////////Удалить в этом месте все теги переноса///////////////////
    if (string.contains("</p>",Qt::CaseInsensitive))
    { newstring=string.remove("</p>");}

    qDebug()<<"NEWSTRING"<<newstring;

    document->setHtml(newstring);

    exportToPreview(document);

}

void MyWidget::exportToPreview(QTextDocument *document)
{

    QTextDocument *d = document->clone(this);
    d->setTextWidth(d->textWidth());

    QBitmap img(d->size().toSize());
    img.fill();

    QPainter p(&img);

    QAbstractTextDocumentLayout *l = d->documentLayout();
    QAbstractTextDocumentLayout::PaintContext ctx;

    QRect rect(0, 0, (int)d->size().width(), (int)d->size().height());

      p.eraseRect(rect);
      p.setClipRect(rect);

      ctx.clip = rect;
      l->draw(&p, ctx);

      img.save("test.BMP", "BMP");
      p.end();
}



Так вот, пошел по пути загрузить с TextEditora Html в string, в нем удалить тег переноса на новую строку </p>, а далее его  загруить в  QTextDocument а его уже прорисовать в файл.
Ну и не могу понять что делаю не так,ю так-как не работает, при дебаге  вроде видно что удалился тег </p>, но в document все равно приходит текст с абзацем!!!
Заранее спасибо!!!
PM MAIL   Вверх
borisbn
Дата 8.6.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А почему удаляешь только закрывающий тэг?  Почему не удаляешь <p>?
Ещё перевод м.б. <br>


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


Опытный
**


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

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



Цитата

возникла такая задачка!!!! 

неможетбыыыть!!!!

Цитата

нужно что-бы  файл  прорисовался одной строкой

Идеальный вариант - просто удалить все html теги регулярным выражением <[^>]*?>
PM MAIL WWW   Вверх
GianSteps
Дата 9.6.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(borisbn @ 8.6.2011,  23:30)
А почему удаляешь только закрывающий тэг?  Почему не удаляешь <p>?
Ещё перевод м.б. <br>

Пробывал и их удалять, тоже не выходит!
PM MAIL   Вверх
GianSteps
Дата 9.6.2011, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(afiskon @ 9.6.2011,  06:14)

Идеальный вариант - просто удалить все html теги регулярным выражением <[^>]*?>

я так понимаю что надо рытьв сторону QRegExp!!! но если честно то не знаю как сними работать? никогда не доводилось!

PM MAIL   Вверх
bsa
Дата 9.6.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а чем textEdit->toPlainText().remove(QLatin1Char('\n')) не устраивает?
PM   Вверх
GianSteps
Дата 9.6.2011, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(bsa @ 9.6.2011,  19:52)
а чем textEdit->toPlainText().remove(QLatin1Char('\n')) не устраивает?

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


Эксперт
****


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

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



GianSteps, т.е. тебе необходимо переформатировать многострочный html текст в однострочный?
PM   Вверх
borisbn
Дата 10.6.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



>Пробывал и их удалять , тоже не выходит!
Нужно именно все три удалять. Не имеет смысла либо то либо то 


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


Новичок



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

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



Цитата(bsa @ 10.6.2011,  11:36)
GianSteps, т.е. тебе необходимо переформатировать многострочный html текст в однострочный?

Да!!!
PM MAIL   Вверх
GianSteps
Дата 11.6.2011, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(borisbn @ 10.6.2011,  11:54)
>Пробывал и их удалять , тоже не выходит!
Нужно именно все три удалять. Не имеет смысла либо то либо то

Пробую выдалять все три вот так:
Код


void MyWidget::previewbutton()
{

    document = new QTextDocument;

    QString string;
    QString newstring;
    string = textEdit->toHtml();

    qDebug()<<"STRING"<<string;
////////////////////Удалить в этом месте все теги переноса///////////////////
    if (string.contains("</p>",Qt::CaseInsensitive))

    { newstring=string.remove("</p>");}

    if (string.contains("<p>",Qt::CaseInsensitive))
    {newstring=string.remove("<p>");}

    if (string.contains("<br>",Qt::CaseInsensitive))
    {newstring=string.remove("<br>");}

    qDebug()<<"NEWSTRING"<<newstring;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    document->setHtml(newstring);
    exportToPreview(document);

}




Например в одной строке набираю Hello на следуещей набираю world
вот что выдает Дебаг:
1. до всех условий проверки      qDebug()<<"STRING"<<string;
Код

STRING "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hello</p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">world!!!</p></body></html>" 


2. после     qDebug()<<"NEWSTRING"<<newstring;
Код

NEWSTRING "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Hello
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">world!!!</body></html>" 

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


Эксперт
****


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

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



Ясно. Тогда тебе нужно воспользоваться советом afiskon - регулярки - только удалять не все тэги, а только
 <p[^>]*?> и  </p[^>]*?> 


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


Новичок



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

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



Цитата(borisbn @ 11.6.2011,  07:04)
Ясно. Тогда тебе нужно воспользоваться советом afiskon - регулярки - только удалять не все тэги, а только
 <p[^>]*?> и  </p[^>]*?>

Всем спасибо!!! вроде разобрался. Использовал данные "регулярки" правда не <p[^>]*?> и  </p[^>]*?>,  а  <p[^>]*> и  </p[^>]*> так и не понял в чем разница но последние работают!!!!!

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

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

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


 




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


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

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