Hi all,

I have been researching how to have a QSyntaxHighlighter change QTextBlockFormat. I need my syntax highlighter to change the indent, left and right margins, line height, etc. of a QTextDocument/QTextEdit.

I was able to have my class derived from QSyntaxHighlighter change the QTextBlockFormat of individual blocks easy enough using the QTextCursor interface, but the problem with that is that it messes up undo/redo functionality. All of the block format changes go onto the undo/redo stack and so make undo/redo unusable.

I have tried to find a way to modify QTextBlockFormat directly (getting the QTextLayout * of the current block and trying setPosition() on it, or even trying to move the individual lines of the QTextLayout), but it can't modify it here as I suspected (at least the way I tried it).

I can't find any other way to modify QTextBlockFormat in a way that won't be recorded onto the undo/redo stack.

So my options are (that I can see):

1) Roll my own complete undo/redo stack for QTextDocument/QTextEdit. This
   seems overkill since it's already written.

2) Modify Qt to be able to disable the undo/redo stack temporarily while
   the QSyntaxHighlighter is changing the block format. There's already a
   function QTextDocument::setUndoRedoEnabled(bool enable). But I can't
   use it directly because it clears the undo/redo stack (the docs says
   the undo stack, but the code looks like it's clearing the redo
   stack???). Either way I need to modify
   QTextDocument::setUndoRedoEnabled(bool enable) so that it can enable
   and disable undo/redo without clearing the stack(s). It would seem like
   I could add a second parameter to the function with a default value to
   work like it does currently, but with an option that can be added to
   not clear the stack. Although I've only written 2-3 patches for Qt,
   this seems easy enough that I could do it. But I wanted to check first
   if this seems like a reasonable approach and would be likely to be
   accepted.

Obviously, I would like to take option 2, but I wanted feedback first. Does that seem like a reasonable approach? Will it be likely to be included in Qt? I don't want to write a patch if there are clear problems with the approach. Also, if anyone has a way to easily modify the blockformat of a block without affecting undo/redo, that would be great. Or even if someone has rolled their own undo/redo for QTextDocument, I suppose I could use that. Thanks for any help, it is greatly appreciated.

Josh
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to