テキストまたはhtmlしかない場合はQLabel
、使用可能なスペースにサイズがすでに適応しているため、代わりに使用できます。以下を使用する必要があります。
label->setWordWrap(true);
label->setTextInteractionFlags(Qt::TextBrowserInteraction);
とほぼ同じ動作をしQTextBrowser
ます。
本当に使用したい場合は、次のようなものを試すことができます(ソースコードQTextBrowser
から適応):QLabel
class TextBrowser : public QTextBrowser {
Q_OBJECT
public:
explicit TextBrowser(QWidget *parent) : QTextBrowser(parent) {
// updateGeometry should be called whenever the size changes
// and the size changes when the document changes
connect(this, SIGNAL(textChanged()), SLOT(onTextChanged()));
QSizePolicy policy = sizePolicy();
// Obvious enough ?
policy.setHeightForWidth(true);
setSizePolicy(policy);
}
int heightForWidth(int width) const {
int left, top, right, bottom;
getContentsMargins(&left, &top, &right, &bottom);
QSize margins(left + right, top + bottom);
// As working on the real document seems to cause infinite recursion,
// we create a clone to calculate the width
QScopedPointer<QTextDocument> tempDoc(document()->clone());
tempDoc->setTextWidth(width - margins.width());
return qMax(tempDoc->size().toSize().height() + margins.height(),
minimumHeight());
}
private slots:
void onTextChanged() {
updateGeometry();
}
};