2017-07-31 80 views
0

我有QScrollArea有QVBoxLayout我放置小部件,其中之一是QTextBrowser,我想讓QTextBrowser有其內容的大小,並刪除它的滾動條。 我繼承QTextBrowser,改變sizePolicy,藏滾動條和overrided sizeHint()這樣的:如何使QTextBrowser具有最大尺寸?

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秒後,它變得更大。 我不確定這是不錯的解決方案。什麼是正確的做法?

+0

隱藏酒吧不會阻止你的小部件裁剪內容,它不是一個尺寸的政策(即它不**意味着_resize,所以你不需要scrollbar_)。你可以刪除它,當你的部件將有你想要的大小滾動條將被隱藏。你爲什麼改變QSizePolicy?默認_Expanding_似乎是你想要的。你可以看一下[QAbstractScrollArea :: sizeAdjustPolicy](http://doc.qt.io/qt-5/qabstractscrollarea.html#sizeAdjustPolicy-prop),也許這會做你想要的而不用觸及'sizeHint() '。 – ymoreau

+0

@ymoreau,是的,我知道滾動條政策。 使用默認大小策略小部件的大小減小。 而sizeAdjustPolicy也不起作用 – devalone

+0

@ymoreau,我解決了它(向下看)。我不確定它是否是最好的解決方案,但它的工作非常棒。 – devalone

回答

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