QTextEdit 展开直到完全可见
QTextEdit expand until fully visible
我有一个 QDialog
(QVBoxLayout
),按顺序包含以下小部件:QTextEdit
、QLabel
、[layout stretch]
、QPushButton
问题是我希望 QTextEdit
与 QDialog
一起展开,但只能等到滚动条消失,之后布局拉伸应该开始展开,显示 QDialog
之间的间隙=14=] 和 QPushButton
.
解决这个问题的明智方法是什么?
注意:QDialog 可以调整大小,QTextEdit 可以自动换行。
编辑:对于 Qt4/PySide,以下应该有效
class TextEdit(qt.QTextEdit):
def __init__(self, *args, **kwargs):
qt.QTextEdit.__init__(self, *args, **kwargs)
self.document().modificationChanged.connect(self.updateMaxHeight)
def updateMaxHeight(self, *args):
self.setMaximumHeight(self.document().size().height())
def resizeEvent(self, e):
qt.QTextEdit.resizeEvent(self, e)
self.updateMaxHeight()
class MyDialog(qt.QDialog):
def __init__(self, *args, **kwargs):
qt.QDialog.__init__(self, *args, **kwargs)
self.setLayout(qt.QVBoxLayout())
self.textEdit = TextEdit('Example text')
self.layout().addWidget(self.textEdit, 1) #1 for resizable
self.layout().addWidget(qt.QLabel('Example label')
self.layout().addStretch()
self.layout().addWidget(qt.QPushButton('Example button')
这比看起来更难:
class TextEdit : public QTextEdit
{
public:
TextEdit(QWidget *parent = nullptr)
: QTextEdit(parent)
{
setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
connect(this, &TextEdit::textChanged, this, &TextEdit::updateGeometry);
}
QSize viewportSizeHint() const override
{
return document()->size().toSize();
}
};
想法是使视口大小提示与文档大小相对应,并使滚动区域适应视口大小。您还必须确保在向文档添加新行时布局得到通知。
最后一个难题是为您的拉伸项目提供更大的拉伸系数,这样它就不会开始与编辑器共享 space:
layout->addStretch(1);
我有一个 QDialog
(QVBoxLayout
),按顺序包含以下小部件:QTextEdit
、QLabel
、[layout stretch]
、QPushButton
问题是我希望 QTextEdit
与 QDialog
一起展开,但只能等到滚动条消失,之后布局拉伸应该开始展开,显示 QDialog
之间的间隙=14=] 和 QPushButton
.
解决这个问题的明智方法是什么?
注意:QDialog 可以调整大小,QTextEdit 可以自动换行。
编辑:对于 Qt4/PySide,以下应该有效
class TextEdit(qt.QTextEdit):
def __init__(self, *args, **kwargs):
qt.QTextEdit.__init__(self, *args, **kwargs)
self.document().modificationChanged.connect(self.updateMaxHeight)
def updateMaxHeight(self, *args):
self.setMaximumHeight(self.document().size().height())
def resizeEvent(self, e):
qt.QTextEdit.resizeEvent(self, e)
self.updateMaxHeight()
class MyDialog(qt.QDialog):
def __init__(self, *args, **kwargs):
qt.QDialog.__init__(self, *args, **kwargs)
self.setLayout(qt.QVBoxLayout())
self.textEdit = TextEdit('Example text')
self.layout().addWidget(self.textEdit, 1) #1 for resizable
self.layout().addWidget(qt.QLabel('Example label')
self.layout().addStretch()
self.layout().addWidget(qt.QPushButton('Example button')
这比看起来更难:
class TextEdit : public QTextEdit
{
public:
TextEdit(QWidget *parent = nullptr)
: QTextEdit(parent)
{
setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
connect(this, &TextEdit::textChanged, this, &TextEdit::updateGeometry);
}
QSize viewportSizeHint() const override
{
return document()->size().toSize();
}
};
想法是使视口大小提示与文档大小相对应,并使滚动区域适应视口大小。您还必须确保在向文档添加新行时布局得到通知。
最后一个难题是为您的拉伸项目提供更大的拉伸系数,这样它就不会开始与编辑器共享 space:
layout->addStretch(1);