我有一个QMainWindow,里面有一个带QTextEdit的QVBoxLayout。我使用insertHtml来固定CSS,后者基本上归结为具有恒定宽度的等宽线,因此它应该是可预测的,一旦一行进入,QTextEdit应显示整个文本的宽度。问题是,我不知道如何获得这个宽度。我尝试了很多东西:adjustSize(),获取底层QTextDocument的大小,QFontMetrics(不测量具有由样式表修改的类的HTML),甚至做
QFont f("monospace");
QFontMetrics fm(f);
QString s = QString("A").repeated(MyTextWidth);
unsigned NewWidth = fm.width(s)
产生一个应用于QTextEdit的值,setFixedWidth会产生不正确的结果。 那么我怎样才能自动设置QTextEdit的宽度(以及拥有它的QMainWindow)来显示整行文本而不使用水平滚动条?
答案 0 :(得分:1)
您可以使用QTextDocument::idealWidth
来确定实际文字宽度。在查询理想宽度之前使QTextEdit
可见是很重要的。不要忘记将内容边距添加到其值中。
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());
结果: