Qt - 如何使 QTextBrowser 调整为内容(垂直布局)

Posted

技术标签:

【中文标题】Qt - 如何使 QTextBrowser 调整为内容(垂直布局)【英文标题】:Qt - How to make QTextBrowser resize to contents (vertical layout) 【发布时间】:2014-08-28 15:25:31 【问题描述】:

我的对话框中有一个 QTextBrowser 对象,该对象将写入 html。它与其他几个对象处于垂直布局中。我将此 QTextbrowser 的垂直大小策略当前设置为 MinimumExpanding。问题是,如果写入浏览器的 HTML 最终高于 QTextBrowser 的最小设置高度,它的高度保持不变,而是让我向下滚动浏览器以查看所有数据,我希望它显示所有数据一次。我尝试过更改 QTextBrowser 的大小策略及其所在的布局,但我尝试过的任何方法都没有奏效。有没有办法做到这一点,我忽略了?

【问题讨论】:

QTextBrowser 随着你填充它而扩展的想法对我来说似乎很奇怪,如果你不想要滚动肯定只是让它更大,尽管如果你超过滚动看起来确实是一个非常正常的预期行为文本浏览器的大小限制 这是要在您键入时完成,还是在键入完成后框会调整大小?因为你可以很容易地设置 QTextbrowser 的高度,因为你知道要在其中的行数?实际上,您甚至可以逐行执行此操作,但这可能看起来有点偏离 @AngryDuck 用户没有在框中输入任何内容,它正在从网页中检索一个 html 表格并显示它,它在此过程中只检索一次,因此需要一旦将其设置为浏览器的 html,就适合该表的高度 啊,我现在明白了,你知道你有多少行,然后再把它们都加起来吗?基本上看一下,我在 QTextBrowser 中找不到任何此类功能,但如果您知道要添加的行数,那么您可以确定那么多行的高度? @AngryDuck 我很可能会这样做,因为我可以访问事先使用的 html。我的项目负责人说他希望只使用 QTextBrowser 的属性而不是计算行数,但我已经在网上搜索了一段时间,我不相信它可以以这种方式完成,所以这可能是最好的要走的路。谢谢:) 【参考方案1】:
QTextBrowser  *m_text=new QTextBrowser;
m_text->setFixedHeight(m_text->document()->size().height());

希望能帮助你。

【讨论】:

【参考方案2】:

如果您知道要添加多少行,那么您可以计算出一个高度,然后设置该高度。

int number_of_lines; // If you can get this value from somewhere this should work

// Get the height of the font being used
QFontMetrics font_metrics(ui->text_browser->font());
int font_height = font_metrics.height();

// Get the height by multiplying number of lines by font height, Maybe add to this a bit for a slight margin?
int height = font_height * number_of_lines;

// Set the height to the text broswer
ui->text_browser->setMinimumHeight(height);
ui->text_browser->setMaximumHeight(height);

【讨论】:

谢谢,这确实有帮助,不幸的是,现在浏览器的空间真的很大 -_- 我想我可以稍微修改一下数字,直到弄对为止 嗯应该可以检查你的行数等是否正确,但不用担心它是如何设置的,所以就像你说的修补一下,应该没问题 实际上发现新问题来自其他问题,这有效:) 可能想要使用行距而不是字体高度。 doc.qt.io/qt-5/qfontmetrics.html#lineSpacing

以上是关于Qt - 如何使 QTextBrowser 调整为内容(垂直布局)的主要内容,如果未能解决你的问题,请参考以下文章

QT:如何在点击事件上展开/折叠文本(qtextbrowser,qwebview,...)

左键单击时QT QTextBrowser禁用写入位置

如何使 QTextBrowser 具有最大的尺寸?

如何用 Qt 中的单个表填充 QTextBrowser?

如何在 Qt 设计器中使控件自动调整大小?

QT qtextbrowser 如何在读取文件的时候不自动换行,完全按照文件的格式输出?