调整QT的QTextEdit大小以匹配文本宽度

3
我有一个QMainWindow,其中包含一个QVBoxLayout和一个QTextEdit。我使用insertHtml将固定CSS的内容插入到QTextEdit中,基本上就是等宽行和常量宽度,因此一旦一行进入,就应该可以预测QTextEdit的宽度以显示整个文本。问题是,我不知道如何获取该宽度。我尝试了很多方法:adjustSize(),获取底层QTextDocument的大小,QFontMetrics(不能测量被样式表修改的类的HTML),甚至执行...
QFont f("monospace");
QFontMetrics fm(f);
QString s = QString("A").repeated(MyTextWidth);
unsigned NewWidth = fm.width(s)

使用setFixedWidth设置的值会导致应用于QTextEdit的结果不正确。那么我该如何自动设置QTextEdit的宽度(以及拥有它的QMainWindow的宽度),以显示整行文本而不使用水平滚动条呢?

1个回答

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());

结果:

screenshot


听起来很不错,但在这边并没有起作用,它会换行你的示例文本。请记住,这是我第一次使用Qt。我的完整代码如下:class Test : public QMainWindow { public: Test(QWidget *parent = 0) : QMainWindow(parent) { QTextEdit *text = new QTextEdit(); text->setReadOnly(true); text->insertHtml("<p>测试 测试 测试 测试 测试</p><p>|||||||||</p>"); text->show(); text->setFixedWidth(text->document()->idealWidth() + text->contentsMargins().left() + text->contentsMargins().right()); } }; - user788041
我使用insertHTML()setFixedWidth()函数添加了一个按钮,每次添加你的示例HTML时,QTextEdit都会缩小一点。我是在布局设置还是QTextEdit本身方面缺少了什么? - user788041

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接