QTextEdit根据文本内容的多少调整width()和height(),实现自适应的宽度和高度,同时右侧和下方均不出现滚动条。
根据https://bbs.csdn.net/topics/330151382里10楼给出的代码作一定的修改,如下:
QTextEdit的父窗口的构造函数:
ui->textEdit->resize(24, 42);
connect(ui->textEdit->document(),SIGNAL(contentsChanged()),this,SLOT(textAreaChanged()));
ui->textEdit->setLineWrapMode(QTextEdit::NoWrap);
槽函数:
void Widget::textAreaChanged()
{
QTextDocument *document=qobject_cast<QTextDocument*>(sender());
document->adjustSize();
if(document)
{
QTextEdit *editor=qobject_cast<QTextEdit*>(document->parent()->parent());
if(editor)
{
int newwidth = document->size().width() + 10;//10
int newheight = document->size().height() + 20;//20
if(newwidth != editor->width())
{
editor->setFixedWidth(newwidth);
}
if(newheight != editor->height())
{
editor->setFixedHeight(newheight);
}
}
}
}
将该功能转为PyQt的代码:
QTextEdit的父窗口的构造函数:
self.width = 24
self.height = 42
self.edit.resize(self.width, self.height)
self.document = self.edit.document()
self.document.contentsChanged.connect(self.textAreaChanged)
self.edit.setLineWrapMode(QTextEdit.NoWrap)
槽函数:
def textAreaChanged(self):
self.document.adjustSize()
newWidth = self.document.size().width() + 10
newHeight = self.document.size().height() + 20
if newWidth != self.edit.width():
self.edit.setFixedWidth(newWidth)
if newHeight != self.edit.height():
self.edit.setFixedHeight(newHeight)