📄 qlayoutitem.cpp
字号:
return 0;}/*! Returns the widget managed by this item.*/QWidget *QWidgetItem::widget(){ return wid;}/*! Returns true if this layout's preferred height depends on its width; otherwise returns false. The default implementation returns false. Reimplement this function in layout managers that support height for width. \sa heightForWidth(), QWidget::heightForWidth()*/bool QLayoutItem::hasHeightForWidth() const{ return false;}/*! Returns the minimum height this widget needs for the given width, \a w. The default implementation simply returns heightForWidth(\a w).*/int QLayoutItem::minimumHeightForWidth(int w) const{ return heightForWidth(w);}/*! Returns the preferred height for this layout item, given the width \a w. The default implementation returns -1, indicating that the preferred height is independent of the width of the item. Using the function hasHeightForWidth() will typically be much faster than calling this function and testing for -1. Reimplement this function in layout managers that support height for width. A typical implementation will look like this: \code int MyLayout::heightForWidth(int w) const { if (cache_dirty || cached_width != w) { // not all C++ compilers support "mutable" MyLayout *that = (MyLayout*)this; int h = calculateHeightForWidth(w); that->cached_hfw = h; return h; } return cached_hfw; } \endcode Caching is strongly recommended; without it layout will take exponential time. \sa hasHeightForWidth()*/int QLayoutItem::heightForWidth(int /* w */) const{ return -1;}/*! Returns the control type(s) for the layout item. For a QWidgetItem, the control type comes from the widget's size policy; for a QLayoutItem, the control types is derived from the layout's contents. \sa QSizePolicy::controlType()*/QSizePolicy::ControlTypes QLayoutItem::controlTypes() const{ // ### Qt 5: This function should probably be virtual instead if (const QWidget *widget = const_cast<QLayoutItem*>(this)->widget()) { return widget->sizePolicy().controlType(); } else if (const QLayout *layout = const_cast<QLayoutItem*>(this)->layout()) { QSizePolicy::ControlTypes types; for (int i = layout->count() - 1; i >= 0; --i) types |= layout->itemAt(i)->controlTypes(); return types; } return QSizePolicy::DefaultType;}/*! \reimp*/void QSpacerItem::setGeometry(const QRect &r){ rect = r;}/*! \reimp*/void QWidgetItem::setGeometry(const QRect &rect){ if (isEmpty()) return; QRect r = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? fromLayoutItemRect(wid->d_func(), rect) : rect; QSize s = r.size().boundedTo(qSmartMaxSize(this)); int x = r.x(); int y = r.y(); if (align & (Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask)) { QSize pref = wid->sizeHint().expandedTo(wid->minimumSize()); //### if (align & Qt::AlignHorizontal_Mask) s.setWidth(qMin(s.width(), pref.width())); if (align & Qt::AlignVertical_Mask) { if (hasHeightForWidth()) s.setHeight(qMin(s.height(), heightForWidth(s.width()))); else s.setHeight(qMin(s.height(), pref.height())); } } Qt::Alignment alignHoriz = QStyle::visualAlignment(wid->layoutDirection(), align); if (alignHoriz & Qt::AlignRight) x = x + (r.width() - s.width()); else if (!(alignHoriz & Qt::AlignLeft)) x = x + (r.width() - s.width()) / 2; if (align & Qt::AlignBottom) y = y + (r.height() - s.height()); else if (!(align & Qt::AlignTop)) y = y + (r.height() - s.height()) / 2; wid->setGeometry(x, y, s.width(), s.height());}/*! \reimp*/QRect QSpacerItem::geometry() const{ return rect;}/*! \reimp*/QRect QWidgetItem::geometry() const{ return !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? toLayoutItemRect(wid->d_func(), wid->geometry()) : wid->geometry();}/*! \reimp*/bool QWidgetItem::hasHeightForWidth() const{ if (isEmpty()) return false; if (wid->layout()) return wid->layout()->hasHeightForWidth(); return wid->sizePolicy().hasHeightForWidth();}/*! \reimp*/int QWidgetItem::heightForWidth(int w) const{ if (isEmpty()) return -1; w = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? fromLayoutItemSize(wid->d_func(), QSize(w, 0)).width() : w; int hfw; if (wid->layout()) hfw = wid->layout()->totalHeightForWidth(w); else hfw = wid->heightForWidth(w); if (hfw > wid->maximumHeight()) hfw = wid->maximumHeight(); if (hfw < wid->minimumHeight()) hfw = wid->minimumHeight(); hfw = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? toLayoutItemSize(wid->d_func(), QSize(0, hfw)).height() : hfw; if (hfw < 0) hfw = 0; return hfw;}/*! \reimp*/Qt::Orientations QSpacerItem::expandingDirections() const{ return sizeP.expandingDirections();}/*! \reimp*/Qt::Orientations QWidgetItem::expandingDirections() const{ if (isEmpty()) return Qt::Orientations(0); Qt::Orientations e = wid->sizePolicy().expandingDirections(); /* If the layout is expanding, we make the widget expanding, even if its own size policy isn't expanding. This behavior should be reconsidered in Qt 4.0. (###) */ if (wid->layout()) { if (wid->sizePolicy().horizontalPolicy() & QSizePolicy::GrowFlag && (wid->layout()->expandingDirections() & Qt::Horizontal)) e |= Qt::Horizontal; if (wid->sizePolicy().verticalPolicy() & QSizePolicy::GrowFlag && (wid->layout()->expandingDirections() & Qt::Vertical)) e |= Qt::Vertical; } if (align & Qt::AlignHorizontal_Mask) e &= ~Qt::Horizontal; if (align & Qt::AlignVertical_Mask) e &= ~Qt::Vertical; return e;}/*! \reimp*/QSize QSpacerItem::minimumSize() const{ return QSize(sizeP.horizontalPolicy() & QSizePolicy::ShrinkFlag ? 0 : width, sizeP.verticalPolicy() & QSizePolicy::ShrinkFlag ? 0 : height);}/*! \reimp*/QSize QWidgetItem::minimumSize() const{ if (isEmpty()) return QSize(0, 0); return !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? toLayoutItemSize(wid->d_func(), qSmartMinSize(this)) : qSmartMinSize(this);}/*! \reimp*/QSize QSpacerItem::maximumSize() const{ return QSize(sizeP.horizontalPolicy() & QSizePolicy::GrowFlag ? QLAYOUTSIZE_MAX : width, sizeP.verticalPolicy() & QSizePolicy::GrowFlag ? QLAYOUTSIZE_MAX : height);}/*! \reimp*/QSize QWidgetItem::maximumSize() const{ if (isEmpty()) { return QSize(0, 0); } else { return !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? toLayoutItemSize(wid->d_func(), qSmartMaxSize(this, align)) : qSmartMaxSize(this, align); }}/*! \reimp*/QSize QSpacerItem::sizeHint() const{ return QSize(width, height);}/*! \reimp*/QSize QWidgetItem::sizeHint() const{ QSize s(0, 0); if (!isEmpty()) { s = wid->sizeHint().expandedTo(wid->minimumSizeHint()); s = s.boundedTo(wid->maximumSize()) .expandedTo(wid->minimumSize()); s = !wid->testAttribute(Qt::WA_LayoutUsesWidgetRect) ? toLayoutItemSize(wid->d_func(), s) : s; if (wid->sizePolicy().horizontalPolicy() == QSizePolicy::Ignored) s.setWidth(0); if (wid->sizePolicy().verticalPolicy() == QSizePolicy::Ignored) s.setHeight(0); } return s;}/*! Returns true.*/bool QSpacerItem::isEmpty() const{ return true;}/*! Returns true if the widget is hidden; otherwise returns false. \sa QWidget::isHidden()*/bool QWidgetItem::isEmpty() const{ return wid->isHidden() || wid->isWindow();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -