У меня есть собственный 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.