PyQt4 4.4.4 : a bug with highlightBlock ?
David Boddie
david at boddie.org.uk
Thu Nov 19 18:55:51 EST 2009
On Wednesday 18 November 2009 11:47, Snouffy wrote:
> I've been trying to do some syntax highlighting using PyQt4. I ported
> the example given in the documentation of Qt4 to Python. It works fine
> on my computer at work (which has PyQt4 version 4.3.3) but doesn't on
> my home computer (which has version 4.4.4) : it gets stuck in an
> infinite loop.
This is a known issue. There are examples distributed with PyQt that should
have been updated to use a slightly different approach.
> Here is the code :
>
> class MyHighlighter(QtGui.QSyntaxHighlighter):
> def __init__(self, edit):
> QtGui.QSyntaxHighlighter.__init__(self,edit)
>
> def highlightBlock(self, text):
> myClassFormat = QtGui.QTextCharFormat()
> myClassFormat.setFontWeight(QtGui.QFont.Bold)
> myClassFormat.setForeground(QtCore.Qt.darkMagenta)
> pattern = "\\b[A-Z_]+\\b"
>
> expression = QtCore.QRegExp(pattern)
> index = text.indexOf(expression);
> while (index >= 0):
> length = expression.matchedLength()
> self.setFormat(index, length, myClassFormat)
> index = text.indexOf(expression, index + length)
You need to change the indexOf() calls to indexIn() calls on the QRegExp
object:
index = expression.indexIn(text, index + length)
> What am I missing ? Is this a known bug of version 4.4.4 ?
I think there was a behavioural change at some point that affected regular
expression searching in QStrings.
David
More information about the Python-list
mailing list