Эпиграф.
- Вот за это я и ненавижу кошек.
- Ты просто не умеешь их готовить.
Глава 1.
Если посмотреть внимательно на приведенный фрагмент кода, то видно, что там происходит копирование документа и его обработка.
И уже потом из него получается html. В этом и была проблема.
Вот описание формата HTML в буфере обмена windows.
Из описания видно, что в формате есть два поля в заголовке формата
HTML
StartFragment:140
EndFragment:160
И маркеры внутри хтмл
HTML
<!--StartFragment -->
<LI> The Fragment </LI>
<!--EndFragment -->
Обе пары имеют одинаковое назначение: указать начало и конец необходимого фрагмента.
Т.к. выдрать кусок из хтмл нельзя из-за тегов, поэтому до начала фрагментов могут присутствовать другие теги (контекст фрагмента).
Глава 2.
Суть проблемы: получая html из объекта QTextDocument, в результате отсутствуют маркеры начала и конца фрагмента (т.к. это целый документ).
Что логично и нельзя воспринимать как баг. А получая html из QTextDocumentFragment, в результирующем html выставлены эти теги (маркеры <!-- -->). Они обрамляют фрагмент. Что тоже логично.
Теперь когда через QClipboard мы помещаем в буфер html полученный из документа, а не из фрагмента (как нужно делать), кто-то умный видя, что маркеры отсутствуют тупо добавляет их по краям, т.е. в начале и в конце.
При этом не обновляя значения в полях заголовка.
И итоге получается, что положение маркеров в html не соответствует значениям заданным в заголовке формата.
Видя такую картину Google Chrome как истинно кошерная программа отказывается принимать такой фрагмент, хотя всем другим это глубоко фиолетово
Глава 3.
Решение:
Оно очень простое. Необходимо в документе выделить весь текст и получить выделенный фрагмент, а уже из него получать html.
Т.е. вот таким образом:
C++ (Qt)
cur.setPosition(0);
cur.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
fragment = cur.selection();
mimeData->setData("text/html", fragDoc.toHtml("utf-8").toUtf8());
А вот пациент (видно, что значения в шапке не валидны, хотя скорее это маркеры неправильно расположены):
HTML
Version:1.0
StartHTML:0000000105
EndHTML:0000001323
StartFragment:0000000127
EndFragment:0000001305
<!--StartFragment--><!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" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; 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;"><span style=" font-weight:600;">Andrew</span> 12:33:48 demo text handId=92034024 </p></body></html><!--EndFragment-->
Занавес.