对 QMainWindow 的大小调整做出反应以调整小部件的大小
Posted
技术标签:
【中文标题】对 QMainWindow 的大小调整做出反应以调整小部件的大小【英文标题】:react on the resizing of a QMainWindow for adjust widget's size 【发布时间】:2011-09-04 20:01:28 【问题描述】:我对@987654321@ 的大小调整有何反应?我在QScrollArea
中有QTextBrowsers
,我在创建它们时将它们调整为内容的大小(唯一应该滚动的是QScrollArea
)。
现在一切正常,但如果我调整 mainWindow
的大小,QTextBrowsers
的高度不会改变,因为不会触发回流功能。
您有什么更好的办法来调整QTextBrowser
的内容吗?我当前的代码是:
void RenderFrame::adjustTextBrowser(QTextBrowser* e) const
e->document()->setTextWidth(e->parentWidget()->width());
e->setMinimumHeight(e->document()->size().toSize().height());
e->setMaximumHeight(e->minimumHeight());
parentWidget()
是必要的,因为在小部件本身上运行 width()
总是返回 100,无论实际大小如何。
【问题讨论】:
调整小部件大小的标准方法是将它们放在适当配置的布局中。 但是没有办法让QtextBrowser
自动调整到不需要滚动条的最小尺寸
【参考方案1】:
如果只有文本或 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();
;
【讨论】:
以上是关于对 QMainWindow 的大小调整做出反应以调整小部件的大小的主要内容,如果未能解决你的问题,请参考以下文章
根据 QMainWindow 的大小调整 QWebView 和 QMessagebox 的大小
如何将 QMainWindow 调整大小事件传递给 QMainWindow 中包含的 QGLWidget?
Qt:为啥在 QMainWindow 中添加状态栏会影响大小调整?
如何对 UIView 上的自动布局约束引起的大小变化做出反应?
与 QMainWindow 的 GUI 命令交互时,QDockWidget 无法正确调整大小
如何调整 QMainWindow 的大小以适合具有 setVerticalHeaderLabels 的 QTableWidget