QTextEdit ведет себя по-разному внутри и снаружи области прокрутки - PullRequest
0 голосов
/ 04 июня 2019

У меня есть собственный qtextedit (называемый testLabel).Я сделал так, чтобы я модифицировал обычный qtextedit, чтобы он поддерживал вид эмоций, и сделал его высоту изменяемой с текстом. Теперь моя проблема в том, что когда я использую этот testLabel вне области прокрутки, он работает хорошо, но когда я помещаю его в область прокруткисодержимое метки прокручивается!

Я попытался отключить политику полосы прокрутки для testlabel., Но она скрывает только полосу прокрутки.Перемещение колеса вверх по-прежнему приводит к прокрутке контента.

Здесь находится соответствующая часть testlabel (я удалил ненужные части, такие как обработчик эмоций)

class testLabel(QTextEdit):
    def __init__(self,text,direction,chatMsgType):
        super(testLabel, self).__init__()
        self.setReadOnly(True)
        self.setAcceptRichText(True)
        #self.setDisabled(True)
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(20)
        sizePolicy.setVerticalStretch(0)
        self.setSizePolicy(sizePolicy)
        self.setLineWrapMode(QTextEdit.FixedColumnWidth)
        self.setLineWrapColumnOrWidth(35)

        self.color = "#2ECC71"

        self.direction = "me"



    def paintEvent(self, e):
        try:
            r=self.viewport()
            p = QPainter(r)
            p.setRenderHint(QPainter.Antialiasing, False)

            if self.direction=="me":
                rect = QRectF(6, 0, self.width() - 6, self.height() - 1)
            else:
                rect = QRectF(0, 0, self.width() - 6, self.height() - 1)
            self.adjustSize()
            p.setPen(Qt.NoPen)
            path = QPainterPath()
            path.setFillRule(Qt.WindingFill)
            path.addRoundedRect(rect, 4, 4)

            linePath = QPainterPath()
            if self.direction == "me":
                linePath.moveTo(0-1, rect.height() / 2)
                linePath.lineTo(8-1, 8 + rect.height() / 2)
                linePath.lineTo(8-1, -8 + rect.height() / 2)

            else:
                linePath.moveTo(rect.width()+6, rect.height() / 2)
                linePath.lineTo(rect.width()  , 8 + rect.height() / 2)
                linePath.lineTo(rect.width()  , -8 + rect.height() / 2)





            path = path.united(linePath)
            p.fillPath(path, QColor(self.color))

            super(testLabel, self).paintEvent(e)

        except Exception as e:
            debug.Error(str(e))
            traceback.print_exc()

    def resizeEvent(self, e):
        try:

            super(testLabel, self).resizeEvent( e)
            docHeight = self.document().size().height()
            self.setFixedHeight(docHeight)

            if len(self.toPlainText()) < 35:
                self.document().adjustSize()
                w=self.fontMetrics().boundingRect(self.toPlainText()).width()
                self.setMaximumWidth(w+16+16+self.nEmotions*16)
                #self.nEmotions = no of emotions in text

        except Exception as e:
            traceback.print_exc()

Вот результаты для того же класса, который используется вне vs внутри qscrollarea.

enter image description here

...