Класс QGraphicsAnchorLayout
Класс QGraphicsAnchorLayout предоставляет макет, где можно привязать виджеты друг к другу в представлении графики. Подробнее...
| Заголовок: | #include <QGraphicsAnchorLayout> |
| qmake: | QT += widgets |
| С тех пор: | Qt 4.6 |
| Наследует: | QGraphicsLayout |
Этот класс был представлен в Qt 4.6.
Открытые функции
| QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr) | |
| virtual | ~QGraphicsAnchorLayout() |
| QGraphicsAnchor * | addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge) |
| void | addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical) |
| void | addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner) |
| QGraphicsAnchor * | anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge) |
| qreal | horizontalSpacing() const |
| void | setHorizontalSpacing(qreal spacing) |
| void | setSpacing(qreal spacing) |
| void | setVerticalSpacing(qreal spacing) |
| qreal | verticalSpacing() const |
Переопределённые открытые функции
| virtual int | count() const override |
| virtual void | invalidate() override |
| virtual QGraphicsLayoutItem * | itemAt(int index) const override |
| virtual void | removeAt(int index) override |
| virtual void | setGeometry(const QRectF &geom) override |
Переопределённые защищённые функции
| virtual QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
Подробное описание
Макет привязки позволяет разработчикам указать, как должны размещаться виджеты относительно друг друга и самого макета. Указание делается путём добавления привязок к макету, вызывая addAnchor(), addAnchors() или addCornerAnchors().
Существующие привязки в макете можно получить с помощью функции anchor(). Элементы, которые привязаны, автоматически добавляются в макет, а если элементы удалены, все их привязки будут автоматически удалены.
Привязки всегда устанавливаются между краями элемента, где «центр» также считается краем. Рассмотрим следующий пример:
layout->addAnchor(b, Qt::AnchorLeft, a, Qt::AnchorRight); layout->addAnchor(b, Qt::AnchorTop, a, Qt::AnchorBottom);
Здесь правый край элемента a привязан к левому краю элемента b, а нижний край элемента a привязан к верхнему краю элемента b, в результате чего элемент b будет размещён диагонально справа и ниже элемента b.
Функция addCornerAnchors() предоставляет более простой способ привязки углов двух виджетов, чем два отдельных вызова addAnchor(), показанные в коде выше. Здесь мы видим, как виджет можно привязать к верхнему левому углу окружающего макета:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);
В тех случаях, когда привязки используются для соответствия ширины или высоты виджетов, удобно использовать функцию addAnchors(). Как и в других функциях для задания привязок, её также можно использовать для привязки виджета к макету.
Подсказки размера и политики размера в макете привязок
QGraphicsAnchorLayout учитывает подсказки размера и политики размера каждого элемента. Обратите внимание, что некоторые свойства QSizePolicy не учитываются.
Интервал в макете привязок
Макет может распределять некоторое пространство между элементами. Если интервал не указан явно, фактическое количество пространства обычно будет равно 0.
Однако, если первый край является противоположным второму краю (например, правый край первого виджета привязан к левому краю второго виджета), размер привязки будет запрошен у стиля через метрику пикселей: PM_LayoutHorizontalSpacing для горизонтальных привязок и PM_LayoutVerticalSpacing для вертикальных привязок.
Если интервал отрицательный, элементы будут в некоторой степени перекрываться.
Известные проблемы
Есть некоторые функции, которые QGraphicsAnchorLayout в настоящее время не поддерживает. Это может измениться в будущем, поэтому избегайте использования этих функций, если вы хотите избежать любых будущих регрессий в поведении:
- Факторы растяжения не учитываются.
- QSizePolicy::ExpandFlag не учитывается.
- Высота для ширины не учитывается.
См. также QGraphicsLinearLayout, QGraphicsGridLayout и QGraphicsLayout.
Документация по функциям-членам
QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
Создаёт экземпляр QGraphicsAnchorLayout. parent передаётся в конструктор QGraphicsLayout.
[virtual] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
Уничтожает объект QGraphicsAnchorLayout.
QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Создаёт привязку между краем firstEdge элемента firstItem и краем secondEdge элемента secondItem. Интервал привязки берётся из стиля. Привязки между краем макета и краем элемента будут иметь размер 0. Если между краями уже существует привязка, новая привязка заменит старую.
firstItem и secondItem автоматически добавляются в макет, если они не являются частью макета. Это означает, что count() может увеличиться максимум на 2.
Интервал, который получит привязка, зависит от типа привязки. Например, привязки от правого края одного элемента к левому краю другого (или наоборот) будут использовать стандартный горизонтальный интервал. То же самое поведение относится к привязкам Снизу к Верху (но они будут использовать стандартный вертикальный интервал). Для всех других комбинаций привязок интервал будет равен 0. Все функции привязки будут следовать этому правилу.
Интервал также можно задать вручную, используя метод QGraphicsAnchor::setSpacing().
Вызов этой функции, где firstItem или secondItem являются предками макета, имеет неопределённое поведение.
См. также addAnchors() и addCornerAnchors().
void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
Привязывает два или четыре края firstItem к соответствующим краям secondItem таким образом, что firstItem имеет тот же размер, что и secondItem, в измерениях, указанных в orientations.
Например, следующий пример привязывает левые и правые края двух элементов для соответствия их ширинам:
layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft); layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);
Это также можно сделать с помощью следующей строки кода:
layout->addAnchors(b, c, Qt::Horizontal);
См. также addAnchor() и addCornerAnchors().
void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)
Создаёт две привязки между firstItem и secondItem, заданные углами firstCorner и secondCorner, где одна для горизонтального края, а другая для вертикального.
Это вспомогательная функция, поскольку привязку углов можно выразить как привязку двух краёв. Например:
layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop); layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);
Это также можно сделать с помощью следующей строки кода:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);
Если между парами краёв уже существует привязка, она будет заменена привязками, заданными этой функцией.
firstItem и secondItem автоматически добавляются в макет, если они не являются частью макета. Это означает, что count() может увеличиться максимум на 2.
См. также addAnchor() и addAnchors().
QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Возвращает привязку между точками привязки, определёнными firstItem и firstEdge, и secondItem и secondEdge. Если такой привязки нет, функция вернёт 0.
[override virtual] int QGraphicsAnchorLayout::count() const
Переопределяет: QGraphicsLayout::count() const.
qreal QGraphicsAnchorLayout::horizontalSpacing() const
Возвращает стандартное горизонтальное расстояние для макета привязки.
См. также verticalSpacing() и setHorizontalSpacing().
[override virtual] void QGraphicsAnchorLayout::invalidate()
Переопределяет: QGraphicsLayout::invalidate().
[override virtual] QGraphicsLayoutItem *QGraphicsAnchorLayout::itemAt(int index) const
Переопределяет: QGraphicsLayout::itemAt(int i) const.
[override virtual] void QGraphicsAnchorLayout::removeAt(int index)
Переопределяет: QGraphicsLayout::removeAt(int index).
Удаляет элемент макета по индексу без его уничтожения. Владение элементом передаётся вызывающей стороне.
Удаление элемента также удалит любые привязки, связанные с ним.
[override virtual] void QGraphicsAnchorLayout::setGeometry(const QRectF &geom)
Переопределяет: QGraphicsLayoutItem::setGeometry(const QRectF &rect).
void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)
Устанавливает стандартное горизонтальное расстояние для макета привязки в spacing.
См. также horizontalSpacing(), setVerticalSpacing() и setSpacing().
void QGraphicsAnchorLayout::setSpacing(qreal spacing)
Устанавливает стандартное горизонтальное и стандартное вертикальное расстояние для макета привязки в spacing.
Если элемент привязан без связанного расстояния, он будет использовать стандартное расстояние.
QGraphicsAnchorLayout не поддерживает отрицательные расстояния. Установка отрицательного значения сбросит предыдущее расстояние и заставит макет использовать расстояние, задаваемое текущей стилистикой виджета.
См. также setHorizontalSpacing() и setVerticalSpacing().
void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
Устанавливает стандартное вертикальное расстояние для макета привязки в spacing.
См. также verticalSpacing(), setHorizontalSpacing() и setSpacing().
[override virtual protected] QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
Переопределяет: QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.
qreal QGraphicsAnchorLayout::verticalSpacing() const
Возвращает стандартное вертикальное расстояние для макета привязки.
См. также horizontalSpacing() и setVerticalSpacing().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qgraphicsanchorlayout.html