2017-07-31 6 views
0

J'ai QScrollArea qui a QVBoxLayout où je place des widgets et l'un d'entre eux est QTextBrowser et je veux que QTextBrowser ait la taille de son contenu et supprimer ses barres de défilement. Je hérité QTextBrowser, changé sizePolicy, et overrided cachais scrollbars sizeHint() comme ceci:Comment faire QTextBrowser pour avoir la plus grande taille?

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

Mais cela fonctionne avec retard, au premier widget devient petit et après 1-2 secondes, il devient plus grand. Je ne suis pas sûr si c'est une bonne solution. Quelle est la bonne façon de le faire?

+0

cacher les barres n'empêchera pas votre widget pour recadrer le contenu, ce n'est pas une politique de la taille (à savoir qu'il ne ** pas ** dire _resize donc vous n'avez pas besoin scrollbar_). Vous pouvez supprimer ceci, quand votre widget aura la taille que vous voulez que les barres de défilement soient cachées. Pourquoi avez-vous changé la QSizePolicy? Le _Expanding_ par défaut semble être ce que vous voulez. Vous pouvez jeter un oeil à [QAbstractScrollArea :: sizeAdjustPolicy] (http://doc.qt.io/qt-5/qabstractscrollarea.html#sizeAdjustPolicy-prop), peut-être que cela fera ce que vous voulez sans toucher à sizeHint() '. – ymoreau

+0

@ymoreau, oui, je connais la politique de la barre de défilement. Avec le widget de stratégie de taille par défaut, la taille diminue. Et sizeAdjustPolicy ne fonctionne pas non plus – devalone

+0

@ymoreau, je l'ai résolu (regarde en bas). Je ne suis pas sûr que ce soit la meilleure solution, mais ça marche plutôt bien. – devalone

Répondre

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