我有一个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的宽度),以显示整行文本而不使用水平滚动条呢?
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()); } };
- user788041insertHTML()
和setFixedWidth()
函数添加了一个按钮,每次添加你的示例HTML时,QTextEdit都会缩小一点。我是在布局设置还是QTextEdit本身方面缺少了什么? - user788041