On 5/01/2022 3:30 pm, Joshua Grauman wrote:
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
Hi Josh,
Just a wild guess, but do these syntax changes occur after loading the
document, or while editing? If the latter, maybe the syntax changes
could be grouped with the triggering command as a single undo/redo action?
Regards, Tony
_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest