QGraphicsAnchor 类
QGraphicsAnchor类表示QGraphicsAnchorLayout中两个项目之间的锚。
Header: | #include < QGraphicsAnchor > |
---|---|
qmake: | QT += widgets |
Inherits: | QObject |
Inherited By: | |
Since: | Qt 4.6 |
详述
图形锚点提供了一个API,允许您查询和操作锚点具有的属性。当使用QGraphicsAnchorLayout::addAnchor()将一个锚添加到布局中时,将返回一个QGraphicsAnchor实例,其中属性被初始化为它们的默认值。属性可以进一步更改,它们将在下一次布局被激活时被拾取。
参见QGraphicsAnchorLayout:anchor()。
属性
sizePolicy : QSizePolicy::Policy
此属性保存QGraphicsAnchor的大小策略
通过在锚点上设置大小策略,您可以配置锚点如何从其首选间距调整自身的大小。例如,如果锚点的大小策略是QSizePolicy::Minimum,那么间隔就是锚点的最小大小。然而,它的大小可以增长到锚的最大大小。如果默认的大小策略是QSizePolicy::Fixed,那么锚点既不能增长也不能收缩,这意味着锚点只能拥有间距大小。QSizePolicy::Fixed为默认大小策略。QGraphicsAnchor总是有一个最小间距0和一个非常大的最大间距。
Access functions:
- QSizePolicy::Policy sizePolicy() const
- void setSizePolicy(QSizePolicy::Policy policy)
spacing : qreal
此属性保存QGraphicsAnchorLayout中项目之间的首选间距。
根据锚的类型,默认间距是0或样式返回的值。
Access functions:
- qreal spacing() const
- void setSpacing(qreal spacing)
- void unsetSpacing()
参见QGraphicsAnchorLayout: addAnchor()。
公共函数
只有析构
- virtual ~QGraphicsAnchor()
属性相关
- QSizePolicy::Policy sizePolicy() const
void setSizePolicy(QSizePolicy::Policy policy) - qreal spacing() const
void setSpacing(qreal spacing)
void unsetSpacing()
演示代码
#include <QtWidgets>
class Widget : public QGraphicsWidget
{
public:
Widget(const QColor &color, const QColor &textColor, const QString &caption,
QGraphicsItem *parent = nullptr)
: QGraphicsWidget(parent)
, caption(caption)
, color(color)
, textColor(textColor)
{ }
void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget * = nullptr) override
{
QFont font;
font.setPixelSize(0.75 * qMin(boundingRect().width(), boundingRect().height()));
painter->fillRect(boundingRect(), color);
painter->save();
painter->setFont(font);
painter->setPen(textColor);
painter->drawText(boundingRect(), Qt::AlignCenter, caption);
painter->restore();
}
private:
QString caption;
QColor color;
QColor textColor;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QGraphicsScene scene(0,0,600,400);
Widget *a = new Widget(Qt::blue, Qt::white, "a");
a->setPreferredSize(100, 100);
Widget *b = new Widget(Qt::green, Qt::black, "b");
b->setPreferredSize(100, 100);
Widget *c = new Widget(Qt::red, Qt::black, "c");
c->setPreferredSize(100, 100);
QGraphicsAnchorLayout *layout = new QGraphicsAnchorLayout;
layout->setSpacing (0);
layout->setContentsMargins (0,0,0,0);
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);
layout->addAnchor(b, Qt::AnchorLeft, a, Qt::AnchorRight);
layout->addAnchor(b, Qt::AnchorTop, a, Qt::AnchorBottom);
auto *anchor = layout->addAnchor(b, Qt::AnchorBottom, c, Qt::AnchorTop);
anchor->setSpacing (10);
anchor->setSizePolicy (QSizePolicy::Expanding);
layout->addAnchors(b, c, Qt::Horizontal);
layout->addCornerAnchors(c, Qt::BottomRightCorner, layout, Qt::BottomRightCorner);
auto w = new QGraphicsWidget(nullptr, Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
w->setPos(20, 50);
w->setMinimumSize(100, 100);
w->setPreferredSize(320, 240);
w->setLayout(layout);
w->setWindowTitle(QApplication::translate("simpleanchorlayout", "QGraphicsAnchorLayout in use"));
scene.addItem(w);
QGraphicsView view;
view.setScene(&scene);
view.setWindowTitle(QApplication::translate("simpleanchorlayout", "Simple Anchor Layout"));
view.show();
return app.exec();
}