如何让QTextBrowser拥有最大的尺寸?

时间:2017-07-31 21:27:12

标签: c++ qt qscrollarea qlayout

我有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秒后变大。 我不确定这是不是很好的解决方案。什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

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