如何调整QTextEdit以适应其内容
我正在开发一个Qt应用程序,我试图找到一种方法来使用QTextEdit作为一个带有长文本但没有滚动条的label
。 在我的用户界面中,我有一个QScrollArea
,在其中我想放置一对QTextEdit
小部件,我只想在QScrollArea
使用滚动。 问题是,无论我如何尝试调整QTextEdit
大小,它似乎都具有最大高度和文本的裁剪,即使我手动设置大小并且QTextEdit::size
返回正确的值。
我用QLabel
做了同样的事情,它工作正常,但在这种情况下,我需要一些只在QTextEdit
提供的方法。
我发现这篇文章:调整QT的QTextEdit以匹配文本高度:maximumViewportSize()
给出的答案如下:
我已经解决了这个问题。 有两件事我必须做才能让它起作用:
问题是我不知道如何访问QTextEdit's
QScrollArea
来启用widgetResizable
。 任何人都可以解释我如何实现这一目标,或者提出一种调整QTextEdit
以完全适合其内容的不同方式?
没有一个具体的例子很难判断,但是......听起来好像你只是想要一个QTextEdit
它的sizeHint依赖于当前文档的大小。
class text_edit: public QTextEdit {
using super = QTextEdit;
public:
explicit text_edit (QWidget *parent = nullptr)
: super(parent)
{
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
virtual QSize sizeHint () const override
{
QSize s(document()->size().toSize());
/*
* Make sure width and height have `usable' values.
*/
s.rwidth() = std::max(100, s.width());
s.rheight() = std::max(100, s.height());
return(s);
}
protected:
virtual void resizeEvent (QResizeEvent *event) override
{
/*
* If the widget has been resized then the size hint will
* also have changed. Call updateGeometry to make sure
* any layouts are notified of the change.
*/
updateGeometry();
super::resizeEvent(event);
}
};
然后用作...
QScrollArea sa;
sa.setWidgetResizable(true);
text_edit te;
te.setPlainText(...);
sa.setWidget(&te);
sa.show();
它在我所做的少数测试中似乎按预期工作。
在ui
我定义了QTextEdit *textEdit
对象。 我把它写成height
可伸缩内容:
int count = 0;
QString str = "";
// set textEdit text
ui->textEdit->setText("hfdsfncsadnfscdajkjkjkjhhkdkcan925");
str = ui->textEdit->toPlainText();
for(int i = 0;i < str.length();i++)
if(str.at(i).cell() == 'n')
count++;
// resize textEdit (width and height)
ui->textEdit->resize(ui->textEdit->fontMetrics().width("this is the max-length line in qlabel")
, ui->textEdit->fontMetrics().height() * (count + 2));
注意:如果您更改QTextEdit
字体或大小,这项工作! 只是在高度可扩展(在每一件事情设置你的QTextEdit
frameShape到BOX
)之前。
如果你想做宽度可伸缩内容,你应该执行以下步骤:
QTextEdit
(文本textEdit
对象)文本一行一行 QTextEdit::fontMetrics().width(QString str)
来调查str
宽度的大小 我希望这可以帮助你...
试试这个:
QTextEdit textEdit;
textEdit.setHtml("<p>test test test test test test</p><p>|||||||||</p>");
textEdit.show();
textEdit.setFixedWidth(textEdit.document()->idealWidth() +
textEdit.contentsMargins().left() +
textEdit.contentsMargins().right());
链接地址: http://www.djcxy.com/p/49681.html