Мне нужно устовить некоторым частям документа в QTextEdit заданные свойства, я это делаю так:
QTextCursor cur = textEditVisual->textCursor();
cur.beginEditBlock();
QTextFrameFormat frameFormat;
......
frameFormat.setProperty(1,"cut");
cur.insertFrame(frameFormat);
QTextBlockFormat blockFormat;
blockFormat.setAlignment(Qt::AlignHCenter);
blockFormat.setProperty(1,"cut");
cur.insertBlock(blockFormat);
...
cur.insertImage(":/misc/images/line.gif");
Т.е. получается Фрейм со свойством "cut" в нем ТекстБлок с таким же свойством и в нем картинка - горизонтальная "линия отрыва" :-) .
Так вот если пользователь выделит весь док-т, вырежет в буфер буфер обмена и вставит, то все свойства назначеные частям докт-та с помощью setProperty теряются... :-( так это обойти?
А нужно это для генерации по док-ту BBCode, т.е. фрейм с свойством например "code" преврашается в {code} тест который был во фрейме {/code} и т.д.
И еще - есть ли способ сделать Фрейм в док-те Readonly?
сейчас единственное что придумал - вот такой хак:
void MainWindow::on_textEditVisual_textChanged() {
if(workInProgress) return;
QTextCursor cur = textEditVisual->textCursor();
QTextBlock block = cur.block();
QTextFrame *frame = cur.currentFrame();
if(frame->frameFormat().stringProperty(1) == "cut") {
workInProgress = true;
textEditVisual->undo();
workInProgress = false;
}
};
Т.е. если текст изменился и курсор стоит в блоке со свойством "cut" вызываю undo и изменения откатываются. Кое-как получилось сделать read-only блок но недостаток что при попытке редактирования появляется redo
добавлено спустя 48 минут: Хочу добавить что значение устанавливаемое через QTextBlock::setUserState тоже не сохраняется после вырезания+вставки через Clipboard...
Так же для QTextFrame не сохраняются setMargin() и setPadding()...