Russian Qt Forum
Май 06, 2024, 13:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как заставить QTextBrowser читать значение атрибутов в величинах "pt" и "cm"?  (Прочитано 1098 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Декабрь 07, 2020, 14:13 »

Здравствуйте, господа форумчане.

Усовершенствую простой браузер на основе QTextBrowser.
Взял html страницу полученную из документа расширения .doc с помощью Microssoft Office Word.
Заметил, что QTextBrowser не читает отступы (text-indent), которые были видны в Firefox.

Присмотревшись понял, что конвектор Microssoft Office Word для большинства атрибутов тегов в html
проставил значения в величинах "pt" и "cm". К примеру:
Код:
<p class=MsoNormal style='text-indent:35.45pt'><a href="file4.htm">Регулярные выражения</a></p>
Заменив пару значений вручную на величины "px", я увидел что отступы отрабатывают. 
Решил, нужно пробежаться по html странницам, и в тегах в атрибутах преобразовать величины значений
"pt" и "cm" в "px".

Сначала решил использовать для этого либо QDomElement или QXmlStreamReader и QXmlStreamWriter.
Но снова не вышло(. В моих html страницах в тегах все значения атрибутов, кроме тех, что в "style"
не были взяты в кавычки (" или ') - как к примеру: class=MsoNormal. Из-за этого документ не читался.

Решил с помощью регулярных выражений взять в кавычки значения атрибутов, и потом уже, с помощью,
QDomElement заменить величины "pt" и "cm" на "px".

Написал для взятия значения в кавычки следующий код:
Код:
void change_html(QString page_html)
{
   QFile file_html(page_html);

   if(!file_html.open(QIODevice::ReadWrite))
   {
     qDebug() << "File " << page_html << " not open!";
     return;
   }

   QByteArray file_data;

   QRegExp reg_find_teg("<=(.*)[ ]>"); // регулярное выражение поиска значений атрибутов,
                         // которые не в кавычках(не верное, не знаю как написать его)
   reg_find_teg.setMinimal(true);

   file_data = file_html.readAll();   // считываю весь файл

   QString text_file(file_data);      // считанный текст с файла
   QString find_text;         // найденный текст

   int pos = 0;
   while((pos = reg_find_teg.indexIn(text_file, pos)) != -1)
   {
       find_text = reg_find_teg.cap(1);  // найденный текст

       text_file = text_file.replace(find_text, "\"" + find_text + "\""); // добавление кавычек с помощью
                               // замены в основном тексте

       pos += reg_find_teg.matchedLength();
   }

   file_html.seek(0);             // перемежение в начало файла
   file_html.write(text_file.toUtf8());  // запись строки в файл

   file_html.close();
}

Но не знаю как записать верно эту регулярку QRegExp reg_find_teg("<=(.*)[ ]>");

Может кто-то подскажет? Ну или направит меня на другое более верное решение
проблемы не понимания QTextBrowser величин "pt" и "cm".

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 22.