图形视图(22):【类】QGraphicsAnchor[官翻]

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();
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值