喜欢的QTextEdit一个QWidget能够自动换行的高度,以它的内容是什么?(A QWidget

2019-06-26 20:43发布

我创造了一些QTextEdit窗体中的一种形式。

在的QTextEdit的默认高度超过单个文本行和内容高度超过的QTextEdit的高度,它会创建一个滚动条滚动的内容。

我想重写此行为,以创建一个QTextEdit宁愿包裹它的高度它的内容。 这意味着默认高度将是一个线和包装上或进入一个新的路线,会的QTextEdit自动增加它的高度。 每当内容高度超过的QTextEdit的高度,后者不应该创建一个滚动条,而只是在高度上增加。

我怎么能去这样做? 谢谢。

Answer 1:

这几乎是完全一样的一个问题我回答有关使一个QTextEdit调整其效应初探高度含量的变化前些天: PySide的Qt:自动垂直增长文本编辑的Widget

我回答标志着一个重复的,而不是因为我怀疑其可能你想在这个变化。 让我知道如果你要我扩大这个答案:

另一个问题有多个部分。 这里是增长的高度widget的摘录:

class Window(QtGui.QDialog):

    def __init__(self):
        super(Window, self).__init__()
        self.resize(600,400)

        self.mainLayout = QtGui.QVBoxLayout(self)
        self.mainLayout.setMargin(10)

        self.scroll = QtGui.QScrollArea()
        self.scroll.setWidgetResizable(True)
        self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.mainLayout.addWidget(self.scroll)

        scrollContents = QtGui.QWidget()
        self.scroll.setWidget(scrollContents)

        self.textLayout = QtGui.QVBoxLayout(scrollContents)
        self.textLayout.setMargin(10)

        for _ in xrange(5):
            text = GrowingTextEdit()
            text.setMinimumHeight(50)
            self.textLayout.addWidget(text)


class GrowingTextEdit(QtGui.QTextEdit):

    def __init__(self, *args, **kwargs):
        super(GrowingTextEdit, self).__init__(*args, **kwargs)  
        self.document().contentsChanged.connect(self.sizeChange)

        self.heightMin = 0
        self.heightMax = 65000

    def sizeChange(self):
        docHeight = self.document().size().height()
        if self.heightMin <= docHeight <= self.heightMax:
            self.setMinimumHeight(docHeight)


Answer 2:

以下代码设置一个QTextEdit控件的内容的高度:

# using QVBoxLayout in this example
grid = QVBoxLayout()
text_edit = QTextEdit('Some content. I make this a little bit longer as I want to see the effect on a widget with more than one line.')

# read-only
text_edit.setReadOnly(True)

# no scroll bars in this example
text_edit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 
text_edit.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) 
text_edit.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)

# you can set the width to a specific value
# text_edit.setFixedWidth(400)

# this is the trick, we nee to show the widget without making it visible.
# only then the document is created and the size calculated.

# Qt.WA_DontShowOnScreen = 103, PyQt does not have this mapping?!
text_edit.setAttribute(103)
text_edit.show()

# now that we have a document we can use it's size to set the QTextEdit's size
# also we add the margins
text_edit.setFixedHeight(text_edit.document().size().height() + text_edit.contentsMargins().top()*2)

# finally we add the QTextEdit to our layout
grid.addWidget(text_edit)

我希望这有帮助。



文章来源: A QWidget like QTextEdit that wraps its height automatically to its contents?