danchorsbase_zh
2022-04-14 15:54:18

Class::DAnchorsBase

暂无该属性


Detailed Description

DAnchorsBase 提供了一种指定 QWidget 与其它 QWidget 之间的关系来确定 其位置的方法 除了比较传统的布局方式之外, DtkWidget 还提供了一种使用锚定概念布局控件的方法( 类似于 QQuickItem 中的 anchors 属性),可以认为每个控件具有一组6个不可见的“锚 线”:left, horizontalCenter ,right,top, verticalCenter 和bottom,如图所示:

使用 DAnchors 可以让 QWidget 基于这些“锚线”来确定相互间的关系,如:

DAnchors<QLabel> rect1(new QLabel("rect1"));
DAnchors<QLabel> rect2(new QLabel("rect2"));

rect2.setLeft(rect1.right());

这样 rect2 的左边界就会和 rect1 的右边界对齐:

另外还可以同时设置多个“锚线”:

DAnchors<QLabel> rect1(new QLabel("rect1"));
DAnchors<QLabel> rect2(new QLabel("rect2"));

rect2.setTop(rect1.bottom());
rect2.setLeft(rect1.right());

锚定布局同时在多个控件中使用,控件之间只需要满足以下条件: UnknownCommand 控件之间为兄弟关系,或被锚定控件为父控件 UnknownCommand 锚定关系不能循环绑定 UnknownCommand margin_offset 锚定的间隔和偏移 锚定系统允许设置“锚线”之间的间距,和“锚线”一一对应,每个控件都有一组4个 margin: leftMargin , rightMargin , topMarginbottomMargin 以及两个 offset: UnknownCommand horizontalCenterOffsetverticalCenterOffset

下面是左margin的例子:

DAnchors<QLabel> rect1(new QLabel("rect1"));
DAnchors<QLabel> rect2(new QLabel("rect2"));

rect2.setLeftMargin(5);
rect2.setLeft(rect1.right());

rect2 的左边界相距 rect1 的右边界5个像素:

Note: margin 仅仅是对设置的锚点生效,并不是让控件本身增加了边距,如果设置了 margin,但并没有设置相应的锚点,对控件本身而已是没有任何影响的。margin 的值可以 为负数,通过值的正负来决定margin的方向(内 margin 还是外 margin)

除了基于“锚线”来设置锚定外,另外还有 setCenterInsetFill 这两个比较特殊的 的实现。

UnknownCommandloop_anchor 判断循环锚定的方式 假设 DAnchorsBase a1, a2; a1. setRight (a2. left() ); 则判断 a1 和 a2 之间 会不会存在循环绑定的逻辑为: 尝试更改 a1 右边界的值,更新后如果 a2 左边界的值产出了变化,则认为会导致循环绑 定,否则认为不存在

DAnchorsBase::metaObject

[public plain  virtual]

const QMetaObject * metaObject() const

DAnchorsBase::qt_metacast

[public plain  virtual]

void * qt_metacast(const char *)

DAnchorsBase::qt_metacall

[public plain  virtual]

int qt_metacall(QMetaObject::Call , int , void **)

DAnchorsBase::tr

[public plain static ]

QString tr(const char *s, const char *c, int n)

DAnchorsBase::trUtf8

[public plain static ]

QString trUtf8(const char *s, const char *c, int n)

DAnchorsBase::qt_static_metacall

[private plain static ]

void qt_static_metacall(QObject *, QMetaObject::Call , int , void **)

Class::QPrivateSignal

DAnchorsBase::QPrivateSignal


Detailed Description

This property holds 绑定了锚定功能的控件对象 *. Note: 只读

This property holds 控制锚定功能是否开启,为 false 时仅仅表示不会根据控件各种属性的变化来 * 来更新它的位置,但锚定关系并没有被解除 *. Note: 可读可写

This property holds target 控件的填充目标对象 *. Note: 可读可写

This property holds target 控件的居中目标对象 *. Note: 可读可写

This property holds 上下左右四条“锚线”的边距,此值的优先级低于每条“锚线”特定的 margin 值 *. Note: 可读可写

This property holds 上“锚线”的边距,优先级高于 margins *. Note: 可读可写

This property holds 下“锚线”的边距,优先级高于 margins *. Note: 可读可写

This property holds 左“锚线”的边距,优先级高于 margins *. Note: 可读可写

This property holds 右“锚线”的边距,优先级高于 margins *. Note: 可读可写

This property holds 水平“锚线”的偏移量 *. Note: 可读可写

This property holds 竖直“锚线”的偏移量 *. Note: 可读可写

DAnchorsBase::DAnchorsBase

[public constructor  ]

DAnchorsBase(QWidget *w)

构造 DAnchorsBase 对象,传入的 w 对象会和一个新的 DAnchorsBase 对象 绑定到一起 w 需要使用锚定关系的控件 Note: 对 w 设置的锚定关系不会随着本次构造的 DAnchorsBase 对象的销毁而消失。 此构造函数可能会隐式的构造一个新 DAnchorsBase 对象用于真正的功能实现,函数执行 时会先检查当前是否已经有和 w 对象绑定的 DAnchorsBase 对象,如果没有则会创建一 个新的 DAnchorsBase 对象与之绑定,否则使用已有的对象。隐式创建的 DAnchorsBase 对象会在对应的 QWidget 对象被销毁时自动销毁。

See also target() clearAnchors() getAnchorBaseByWidget()

DAnchorsBase::~DAnchorsBase

[public destructor  virtual]

~DAnchorsBase()

在析构时会判断此 DAnchorsBase 对象是否和 target 存在绑定关系,如果是 则从映射表中移除绑定 Warning: DAnchorsBasePrivate 对象可能是在多个 DAnchorsBase 对象之间显式 共享的,所以在销毁 DAnchorsBase 后,对应的 DAnchorsBasePrivate 对象不一定 会被销毁

See also QExplicitlySharedDataPointer 设置锚定信息的过程中可能出现的错误类型

UnknownCommand 设置锚定的过程中没有任何错误发生

UnknownCommand 表示设置的锚定关系跟已有关系存在冲突,如 fill 和 centerIn 不能同时设置

UnknownCommand 表示设置锚定关系时的目标控件无效

UnknownCommand 表示设置锚定关系时的“锚线”信息错误,如把 Qt::AnchorLeft 设置到了 Qt::AnchorTop 上

UnknownCommand 表示设置的锚定关系和已有关系形成了循环绑定

DAnchorsBase::target

[public plain  ]

QWidget * target() const

DAnchorsBase::enhancedWidget

[public plain  ]

DEnhancedWidget * enhancedWidget() const

返回 target 控件的扩展对象。此对象为 QWidget 对象额外提供了和控件大小、 位置相关的变化信号 Returns See also DEnhancedWidget

DAnchorsBase::enabled

[public plain  ]

bool enabled() const See also setEnabled()

DAnchorsBase::anchors

[public plain  ]

const DAnchorsBase * anchors() const

DAnchorsBase::top

[public plain  ]

const DAnchorInfo * top() const See also setTop()

DAnchorsBase::bottom

[public plain  ]

const DAnchorInfo * bottom() const See also setBottom()

DAnchorsBase::left

[public plain  ]

const DAnchorInfo * left() const See also setLeft()

DAnchorsBase::right

[public plain  ]

const DAnchorInfo * right() const See also setRight()

DAnchorsBase::horizontalCenter

[public plain  ]

const DAnchorInfo * horizontalCenter() const See also setHorizontalCenter()

DAnchorsBase::verticalCenter

[public plain  ]

const DAnchorInfo * verticalCenter() const See also setVerticalCenter()

DAnchorsBase::fill

[public plain  ]

QWidget * fill() const See also setFill()

DAnchorsBase::centerIn

[public plain  ]

QWidget * centerIn() const See also setCenterIn()

DAnchorsBase::margins

[public plain  ]

int margins() const See also setMargins()

DAnchorsBase::topMargin

[public plain  ]

int topMargin() const See also setTopMargin()

DAnchorsBase::bottomMargin

[public plain  ]

int bottomMargin() const See also setBottomMargin()

DAnchorsBase::leftMargin

[public plain  ]

int leftMargin() const See also setLeftMargin()

DAnchorsBase::rightMargin

[public plain  ]

int rightMargin() const See also setRightMargin()

DAnchorsBase::horizontalCenterOffset

[public plain  ]

int horizontalCenterOffset() const See also setHorizontalCenterOffset()

DAnchorsBase::verticalCenterOffset

[public plain  ]

int verticalCenterOffset() const See also setVerticalCenterOffset()

DAnchorsBase::alignWhenCentered

[public plain  ]

int alignWhenCentered() const See also setAlignWhenCentered()

DAnchorsBase::errorCode

[public plain  ]

DAnchorsBase::AnchorError errorCode() const

锚定过程中产生的错误,在一个新的锚定函数被调用之前会清空此错误状态,每次 调用锚定函数后,可以通过此函数的返回值来判断锚定设置是否成功 Returns See also errorString()

DAnchorsBase::errorString

[public plain  ]

QString errorString() const

errorCode 的文本描述信息 Returns See also errorCode

DAnchorsBase::isBinding

[public plain  ]

bool isBinding(const DAnchorInfo *info) const

如果此 info 设置了锚定对象,则返回 true ,否则返回 false

DAnchors<QWidget> w1;
DAnchors<QWidget> w2;

w1.setLeft(w2.right());

qDebug() << w1.isBinding(w1.left()) << w2.isBinding(w2.right());

打印内容为:ture false info Returns

DAnchorsBase::setAnchor

[public plain static ]

bool setAnchor(QWidget *w, const Qt::AnchorPoint &p, QWidget *target, const Qt::AnchorPoint &point)

方便用户直接设置两个对象之间锚定关系的静态函数,调用此函数可能会隐式创建 DAnchorsBase 对象 w 要锚定的控件对象 p 要锚定的锚线/锚点 target 锚定的目标对象 point 锚定的目标锚线/锚点 Returns 如果锚定成功,则返回 true,否则返回 false

DAnchorsBase::clearAnchors

[public plain static ]

void clearAnchors(const QWidget *w)

清除和控件 w 相关的所有锚定关系,包括锚定w或者被w锚定的任何关联。会直接 销毁 w 对应的 DAnchorsBase 对象 w

DAnchorsBase::getAnchorBaseByWidget

[public plain static ]

DAnchorsBase * getAnchorBaseByWidget(const QWidget *w)

返回与 w 绑定的 DAnchorsBase 对象 w Returns 如果 w 没有对应的锚定对象,则返回空

DAnchorsBase::setEnabled

[public slot  ]

void setEnabled(bool enabled) See also enabled()

DAnchorsBase::setAnchor

[public slot  ]

bool setAnchor(const Qt::AnchorPoint &p, QWidget *target, const Qt::AnchorPoint &point)

DAnchorsBase::target 对象设置锚定规则 Note: 可能会为目标控件隐式创建其对应的 DAnchorsBase 对象 p 为当前控件的哪个锚线/锚点设置锚定规则 target 锚定的目标控件 point 锚定的目标锚线/锚点 Returns 如果设置成功,则返回 true,否则返回 false

DAnchorsBase::setTop

[public slot  ]

bool setTop(const DAnchorInfo *top) See also top()

DAnchorsBase::setBottom

[public slot  ]

bool setBottom(const DAnchorInfo *bottom) See also bottom()

DAnchorsBase::setLeft

[public slot  ]

bool setLeft(const DAnchorInfo *left) See also left()

DAnchorsBase::setRight

[public slot  ]

bool setRight(const DAnchorInfo *right) See also right()

DAnchorsBase::setHorizontalCenter

[public slot  ]

bool setHorizontalCenter(const DAnchorInfo *horizontalCenter) See also horizontalCenter()

DAnchorsBase::setVerticalCenter

[public slot  ]

bool setVerticalCenter(const DAnchorInfo *verticalCenter) See also verticalCenter()

DAnchorsBase::setFill

[public slot  ]

bool setFill(QWidget *fill) See also fill()

DAnchorsBase::setCenterIn

[public slot  ]

bool setCenterIn(QWidget *centerIn) See also centerIn()

DAnchorsBase::setFill

[public slot  ]

bool setFill(DAnchorsBase *fill)

将 fill 中的 target() 作为参数调用其它重载函数 fill Returns

DAnchorsBase::setCenterIn

[public slot  ]

bool setCenterIn(DAnchorsBase *centerIn)

centerIn 中的 target() 作为参数调用其它重载函数 centerIn Returns

DAnchorsBase::setMargins

[public slot  ]

void setMargins(int margins) See also margins()

DAnchorsBase::setTopMargin

[public slot  ]

void setTopMargin(int topMargin) See also topMargin()

DAnchorsBase::setBottomMargin

[public slot  ]

void setBottomMargin(int bottomMargin) See also bottomMargin()

DAnchorsBase::setLeftMargin

[public slot  ]

void setLeftMargin(int leftMargin) See also leftMargin()

DAnchorsBase::setRightMargin

[public slot  ]

void setRightMargin(int rightMargin) See also rightMargin()

DAnchorsBase::setHorizontalCenterOffset

[public slot  ]

void setHorizontalCenterOffset(int horizontalCenterOffset) See also horizontalCenterOffset()

DAnchorsBase::setVerticalCenterOffset

[public slot  ]

void setVerticalCenterOffset(int verticalCenterOffset) See also verticalCenterOffset()

DAnchorsBase::setAlignWhenCentered

[public slot  ]

void setAlignWhenCentered(bool alignWhenCentered) See also alignWhenCentered()

DAnchorsBase::setTop

[public slot  ]

void setTop(int arg, Qt::AnchorPoint point)

DAnchorsBase::setBottom

[public slot  ]

void setBottom(int arg, Qt::AnchorPoint point)

DAnchorsBase::setLeft

[public slot  ]

void setLeft(int arg, Qt::AnchorPoint point)

DAnchorsBase::setRight

[public slot  ]

void setRight(int arg, Qt::AnchorPoint point)

DAnchorsBase::setHorizontalCenter

[public slot  ]

void setHorizontalCenter(int arg, Qt::AnchorPoint point)

DAnchorsBase::setVerticalCenter

[public slot  ]

void setVerticalCenter(int arg, Qt::AnchorPoint point)

DAnchorsBase::moveTop

[public slot  ]

void moveTop(int arg)

移动 target 控件的上边界到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::moveBottom

[public slot  ]

void moveBottom(int arg)

移动 target 控件的下边界到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::moveLeft

[public slot  ]

void moveLeft(int arg)

移动 target 控件的左边界到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::moveRight

[public slot  ]

void moveRight(int arg)

移动 target 控件的右边界到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::moveHorizontalCenter

[public slot  ]

void moveHorizontalCenter(int arg)

移动 target 控件的水平中线到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::moveVerticalCenter

[public slot  ]

void moveVerticalCenter(int arg)

移动 target 控件的竖直中线到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::moveCenter

[public slot  ]

void moveCenter(const int &arg)

移动 target 控件的上边界到 arg 这个位置 arg 要移动到的位置

DAnchorsBase::updateVertical

[private slot  ]

void updateVertical()

DAnchorsBase::updateHorizontal

[private slot  ]

void updateHorizontal()

DAnchorsBase::updateFill

[private slot  ]

void updateFill()

DAnchorsBase::updateCenterIn

[private slot  ]

void updateCenterIn()

DAnchorsBase::enabledChanged

[public signal  ]

void enabledChanged(bool enabled)

DAnchorsBase::topChanged

[public signal  ]

void topChanged(const DAnchorInfo *top)

DAnchorsBase::bottomChanged

[public signal  ]

void bottomChanged(const DAnchorInfo *bottom)

DAnchorsBase::leftChanged

[public signal  ]

void leftChanged(const DAnchorInfo *left)

DAnchorsBase::rightChanged

[public signal  ]

void rightChanged(const DAnchorInfo *right)

DAnchorsBase::horizontalCenterChanged

[public signal  ]

void horizontalCenterChanged(const DAnchorInfo *horizontalCenter)

DAnchorsBase::verticalCenterChanged

[public signal  ]

void verticalCenterChanged(const DAnchorInfo *verticalCenter)

DAnchorsBase::fillChanged

[public signal  ]

void fillChanged(QWidget *fill)

DAnchorsBase::centerInChanged

[public signal  ]

void centerInChanged(QWidget *centerIn)

DAnchorsBase::marginsChanged

[public signal  ]

void marginsChanged(int margins)

DAnchorsBase::topMarginChanged

[public signal  ]

void topMarginChanged(int topMargin)

DAnchorsBase::bottomMarginChanged

[public signal  ]

void bottomMarginChanged(int bottomMargin)

DAnchorsBase::leftMarginChanged

[public signal  ]

void leftMarginChanged(int leftMargin)

DAnchorsBase::rightMarginChanged

[public signal  ]

void rightMarginChanged(int rightMargin)

DAnchorsBase::horizontalCenterOffsetChanged

[public signal  ]

void horizontalCenterOffsetChanged(int horizontalCenterOffset)

DAnchorsBase::verticalCenterOffsetChanged

[public signal  ]

void verticalCenterOffsetChanged(int verticalCenterOffset)

DAnchorsBase::alignWhenCenteredChanged

[public signal  ]

void alignWhenCenteredChanged(bool alignWhenCentered)

DAnchorsBase::init

[protected plain  ]

void init(QWidget *w)

DAnchorsBase::DAnchorsBase

[private constructor  ]

DAnchorsBase(QWidget *w, bool )

DAnchorsBase::d_func

[private plain  ]

DAnchorsBasePrivate * d_func()

DAnchorsBase::d_func

[private plain  ]

const DAnchorsBasePrivate * d_func() const