How to adjust QTextEdit to fit it's contents
I'm developing a Qt Application and I'm trying to find a way to use QTextEdit as a label
with long text without the scroll bar. In my ui I have a QScrollArea
and inside of it I want to place a couple off QTextEdit
widgets and I only want use scrolling inside QScrollArea
. Problem is that no matter how I try to resize the QTextEdit
it seems it has a maximum height and cuts of text, even if I set the size manually and QTextEdit::size
returns the correct value.
I did the same thing with QLabel
and it works fine, but in this case I need some methods that are only provided in QTextEdit
.
I found this post: Resizing QT's QTextEdit to Match Text Height: maximumViewportSize()
And the answer given was the following:
I have solved this issue. There were 2 things that I had to do to get it to work:
The problem is that I have no idea how to access the QTextEdit's
QScrollArea
to enable widgetResizable
. Can anyone explain how I can achieve this or suggest a different way of resizing QTextEdit
to perfectly fit it's content?
Without a concrete example it's difficult to judge, but... it sounds as if you simply want a QTextEdit
whose sizeHint depends on the current document size.
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);
}
};
Then use as...
QScrollArea sa;
sa.setWidgetResizable(true);
text_edit te;
te.setPlainText(...);
sa.setWidget(&te);
sa.show();
It appears to work as expected in the few tests I've done.
In ui
i defined QTextEdit *textEdit
object. I write it as height
scalable-content :
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));
Notice : this work if you change QTextEdit
font face or size! just in height scalable (before every thing set your QTextEdit
frameShape to BOX
).
if you want do width scalable-content, you should do these steps :
QTextEdit
( textEdit
object) text as line to line QTextEdit::fontMetrics().width(QString str)
for investigate str
size in width I hope this can help you...
试试这个:
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/49682.html
上一篇: 如何从命令行删除MongoDB数据库?
下一篇: 如何调整QTextEdit以适应其内容