Hey pyside mailing list, it's my first time participating in a mailing list, I hope I'm at the right place for my question/bug report.
*What I'm doing:* I'm working on a custom widget to display an immense amount of words (QPlainTextEdit is too slow for what I need) so here's how I'm doing it: - Custom Widget - QTextDocument - QTextDocument.draw with a QAbstractTextDocumentLayout.PaintContext *My Problem:* I need to implement selection, so I'm calculating which part of the text is selected by comparing press and release position in the document. This works fine, I can retrieve the selected text. BUT, when I want to highlight the selection using the `selections` argument that should be available in the QAbstractTextDocumentLayout.PaintContext instance, it fails, this seems to be missing. I tested this in PyQt too and it works fine, it just looks like it's missing from PySide. (I'm using PySide2). Here's my code: ``` import sysfrom PyQt5 import QtWidgets, QtGui, QtCore LOREM_IPSUM = \''' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dictum ligula mi, ut venenatis urna molestie et. Phasellus velit nunc, consequat nec felis ut, egestas pulvinar mi. In hac habitasse platea dictumst. Mauris eget faucibus est, vitae suscipit neque. Curabitur elementum tellus nec mauris rutrum laoreet. Duis condimentum consequat dui sit amet semper. Nam varius aliquet nibh, sit amet molestie ex scelerisque a. Donec sodales, sapien non consequat luctus, ante quam pretium nibh, sed egestas augue nunc et augue. ''' class TextEdit(QtWidgets.QWidget): def __init__(self, document, parent=None): super(TextEdit, self).__init__(parent=None) self._document = document self._selectionStart = 0 self._selectionEnd = 0 self.cur = QtGui.QTextCursor(self._document) self._selectionFormat = QtGui.QTextCharFormat() self._selectionFormat.setBackground(QtGui.QColor('#2B4A69')) def paintEvent(self, event): painter = QtGui.QPainter(self) # This is the problematic area ctx = QtGui.QAbstractTextDocumentLayout.PaintContext() selection = QtGui.QAbstractTextDocumentLayout.Selection() selection.cursor = self.cur selection.format = self._selectionFormat # print(ctx.selections) # Works in PyQt5, not PySide2 where the attribute is missing. ctx.selections = [selection] self._document.documentLayout().draw(painter, ctx) def mousePressEvent(self, event): start = end = self._document.documentLayout().hitTest(event.pos(), QtCore.Qt.FuzzyHit) self.cur.setPosition(start) self.cur.setPosition(end, QtGui.QTextCursor.KeepAnchor) self.update() def mouseMoveEvent(self, event): end = self._document.documentLayout().hitTest(event.pos(), QtCore.Qt.FuzzyHit) self.cur.setPosition(end, QtGui.QTextCursor.KeepAnchor) self.update() if __name__ == "__main__": if QtWidgets.QApplication.instance() is not None: app = QtWidgets.QApplication.instance() else: app = QtWidgets.QApplication([]) doc = QtGui.QTextDocument() doc.setPlainText(LOREM_IPSUM) widget = TextEdit(doc) widget.show() sys.exit(app.exec_())``` I've asked this on StackOverflow but I was told I should try in the mailing list, so here am I. -> https://stackoverflow.com/questions/75077964/qabstracttextdocumentlayout-paintcontext-works-in-pyqt5-but-not-pyside2?noredirect=1#comment132502605_75077964 Looks like someone opened a bug report but was ignored: -> https://bugreports.qt.io/browse/PYSIDE-1220 *Does anyone knows something about this ? Is it normal ? Is there a workaround ? If it's a real bug, I guess it won't be fixed for PySide2, only in a future release of PySide6 ? * Thank you ! :)
_______________________________________________ PySide mailing list PySide@qt-project.org https://lists.qt-project.org/listinfo/pyside