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

Posted

技术标签:

【中文标题】如何使 QTextBrowser 具有最大的尺寸?【英文标题】:How to make QTextBrowser to have biggest size? 【发布时间】:2017-07-31 21:27:12 【问题描述】:

我有 QScrollArea,它有 QVBoxLayout,我在其中放置小部件,其中之一是 QTextBrowser,我想让 QTextBrowser 具有其内容的大小并删除其滚动条。 我继承了 QTextBrowser,更改了 sizePolicy,隐藏了滚动条并重写了 sizeHint(),如下所示:

TextBrowserWidget::TextBrowserWidget(QWidget* parent)
    : QTextBrowser(parent)

    setSizePolicy(
        QSizePolicy::Preferred,
        QSizePolicy::Minimum);

    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


QSize TextBrowserWidget::sizeHint() const

    if (document()) 
        auto docSize = document()->size();
        return QSize(docSize.width(), docSize.height() + 10);
     else
        return QTextBrowser::sizeHint();

但这有延迟,起初小部件变小,1-2 秒后它变大。 我不确定这是否是一个好的解决方案。正确的做法是什么?

【问题讨论】:

隐藏栏不会阻止您的小部件裁剪内容,这不是大小的策略(即它确实 not 意味着 resize so you don'不需要滚动条)。您可以删除它,当您的小部件具有您想要的大小时,滚动条将被隐藏。您为什么更改 QSizePolicy ?默认的 Expanding 似乎是您想要的。你可以看看QAbstractScrollArea::sizeAdjustPolicy,也许这会做你想做的事,而不用碰sizeHint() @ymoreau,是的,我知道滚动条策略。使用默认大小策略小部件会减小大小。而且 sizeAdjustPolicy 也不起作用 @ymoreau,我解决了(往下看)。我不确定这是否是最好的解决方案,但它确实很酷。 【参考方案1】:
TextBrowserWidget::TextBrowserWidget(QWidget* parent)
    : QTextBrowser(parent)

    setSizePolicy(
        QSizePolicy::Minimum,
        QSizePolicy::MinimumExpanding);

    connect(
        this, &TextBrowserWidget::textChanged,
        this, &TextBrowserWidget::updateSize);

    setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);


QSize TextBrowserWidget::sizeHint()

    updateSize();
    return QTextBrowser::sizeHint();


void TextBrowserWidget::updateSize()

    document()->setTextWidth(viewport()->size().width());
    auto docSize = document()->size().toSize();

    setMinimumWidth(docSize.width());
    setMinimumHeight(docSize.height() + 10);

【讨论】:

以上是关于如何使 QTextBrowser 具有最大的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使视图最大。 SwiftUI 中带填充的宽度

如何使用自动布局使超级视图适合最大的内在大小子视图

QTextBrowser append() 使文本变成超链接

PyQt如何添加到QTextBrowser的链接

mediaelement.js - 具有固定最大尺寸的响应式视频