|
void | setEnabled (bool enabled) |
| 设置 enabled 属性
|
|
bool | setAnchor (const Qt::AnchorPoint &p, QWidget *target, const Qt::AnchorPoint &point) |
| 为 DAnchorsBase::target 对象设置锚定规则
|
|
bool | setTop (const DAnchorInfo *top) |
| 设置 top 属性
|
|
bool | setBottom (const DAnchorInfo *bottom) |
| 设置 bottom 属性
|
|
bool | setLeft (const DAnchorInfo *left) |
| 设置 left 属性
|
|
bool | setRight (const DAnchorInfo *right) |
| 设置 right 属性
|
|
bool | setHorizontalCenter (const DAnchorInfo *horizontalCenter) |
| 设置 horizontalCenter 属性
|
|
bool | setVerticalCenter (const DAnchorInfo *verticalCenter) |
| 设置 verticalCenter 属性
|
|
bool | setFill (QWidget *fill) |
| 设置 fill 属性
|
|
bool | setCenterIn (QWidget *centerIn) |
| 设置 centerIn 属性
|
|
bool | setFill (DAnchorsBase *fill) |
| 将 fill 中的target()作为参数调用其它重载函数
|
|
bool | setCenterIn (DAnchorsBase *centerIn) |
| 将 centerIn 中的target()作为参数调用其它重载函数
|
|
void | setMargins (int margins) |
| 设置 margins 属性
|
|
void | setTopMargin (int topMargin) |
| 设置 topMargin 属性
|
|
void | setBottomMargin (int bottomMargin) |
| 设置 bottomMargin 属性
|
|
void | setLeftMargin (int leftMargin) |
| 设置 leftMargin 属性
|
|
void | setRightMargin (int rightMargin) |
| 设置 rightMargin 属性
|
|
void | setHorizontalCenterOffset (int horizontalCenterOffset) |
| 设置 horizontalCenterOffset 属性
|
|
void | setVerticalCenterOffset (int verticalCenterOffset) |
| 设置 verticalCenterOffset 属性
|
|
void | setAlignWhenCentered (bool alignWhenCentered) |
| 设置 alignWhenCentered 属性
|
|
void | setTop (int arg, Qt::AnchorPoint point) |
| 设置 target 控件到上
|
|
void | setBottom (int arg, Qt::AnchorPoint point) |
| 设置 target 控件到下
|
|
void | setLeft (int arg, Qt::AnchorPoint point) |
| 设置 target 控件到左
|
|
void | setRight (int arg, Qt::AnchorPoint point) |
| 设置 target 控件到右
|
|
void | setHorizontalCenter (int arg, Qt::AnchorPoint point) |
| 设置 target 控件水平
|
|
void | setVerticalCenter (int arg, Qt::AnchorPoint point) |
| 设置 target 控件竖直
|
|
void | moveTop (int arg) |
| 移动 target 控件的上边界到 arg 这个位置
|
|
void | moveBottom (int arg) |
| 移动 target 控件的下边界到 arg 这个位置
|
|
void | moveLeft (int arg) |
| 移动 target 控件的左边界到 arg 这个位置
|
|
void | moveRight (int arg) |
| 移动 target 控件的右边界到 arg 这个位置
|
|
void | moveHorizontalCenter (int arg) |
| 移动 target 控件的水平中线到 arg 这个位置
|
|
void | moveVerticalCenter (int arg) |
| 移动 target 控件的竖直中线到 arg 这个位置
|
|
void | moveCenter (const QPoint &arg) |
| 移动 target 控件的上边界到 arg 这个位置
|
|
|
void | enabledChanged (bool enabled) |
| 信号会在 enabled 属性的值改变时被发送
|
|
void | topChanged (const DAnchorInfo *top) |
| 信号会在 top 属性的值改变时被发送
|
|
void | bottomChanged (const DAnchorInfo *bottom) |
| 信号会在 bottom 属性的值改变时被发送
|
|
void | leftChanged (const DAnchorInfo *left) |
| 信号会在 left 属性的值改变时被发送
|
|
void | rightChanged (const DAnchorInfo *right) |
| 信号会在 right 属性的值改变时被发送
|
|
void | horizontalCenterChanged (const DAnchorInfo *horizontalCenter) |
| 信号会在 horizontalCenter 属性的值改变时被发送
|
|
void | verticalCenterChanged (const DAnchorInfo *verticalCenter) |
| 信号会在 verticalCenter 属性的值改变时被发送
|
|
void | fillChanged (QWidget *fill) |
| 信号会在 fill 属性的值改变时被发送
|
|
void | centerInChanged (QWidget *centerIn) |
| 信号会在 centerIn 属性的值改变时被发送
|
|
void | marginsChanged (int margins) |
| 信号会在 margins 属性的值改变时被发送
|
|
void | topMarginChanged (int topMargin) |
| 信号会在 topMargin 属性的值改变时被发送
|
|
void | bottomMarginChanged (int bottomMargin) |
| 信号会在 bottomMargin 属性的值改变时被发送
|
|
void | leftMarginChanged (int leftMargin) |
| 信号会在 leftMargin 属性的值改变时被发送
|
|
void | rightMarginChanged (int rightMargin) |
| 信号会在 rightMargin 属性的值改变时被发送
|
|
void | horizontalCenterOffsetChanged (int horizontalCenterOffset) |
| 信号会在 horizontalCenterOffset 属性的值改变时被发送
|
|
void | verticalCenterOffsetChanged (int verticalCenterOffset) |
| 信号会在 verticalCenterOffset 属性的值改变时被发送
|
|
void | alignWhenCenteredChanged (bool alignWhenCentered) |
| 信号会在 alignWhenCentered 属性的值改变时被发送
|
|
|
| DAnchorsBase (QWidget *w) |
| 构造 DAnchorsBase 对象,传入的 w 对象会和一个新的 DAnchorsBase 对象绑定到一起
|
|
| ~DAnchorsBase () |
| 在析构时会判断此 DAnchorsBase 对象是否和 target 存在绑定关系,如果是则从映射表中移除绑定
|
|
QWidget * | target () const |
| 返回 target 控件指针
|
|
DEnhancedWidget * | enhancedWidget () const |
| 返回 target 控件的扩展对象。此对象为 QWidget 对象额外提供了和控件大小、位置相关的变化信号
|
|
bool | enabled () const |
| 返回 enabled 属性
|
|
const DAnchorsBase * | anchors () const |
| 返回 anchors 属性
|
|
const DAnchorInfo * | top () const |
| 返回 top 属性
|
|
const DAnchorInfo * | bottom () const |
| 返回 bottom 属性
|
|
const DAnchorInfo * | left () const |
| 返回 left 属性
|
|
const DAnchorInfo * | right () const |
| 返回 right 属性
|
|
const DAnchorInfo * | horizontalCenter () const |
| 返回 horizontalCenter 属性
|
|
const DAnchorInfo * | verticalCenter () const |
| 返回 verticalCenter 属性
|
|
QWidget * | fill () const |
| 返回 fill 属性
|
|
QWidget * | centerIn () const |
| 返回 centerIn 属性
|
|
int | margins () const |
| 返回 margins 属性
|
|
int | topMargin () const |
| 返回 topMargin 属性
|
|
int | bottomMargin () const |
| 返回 bottomMargin 属性
|
|
int | leftMargin () const |
| 返回 leftMargin 属性
|
|
int | rightMargin () const |
| 返回 rightMargin 属性
|
|
int | horizontalCenterOffset () const |
| 返回 horizontalCenterOffset 属性
|
|
int | verticalCenterOffset () const |
| 返回 verticalCenterOffset 属性
|
|
int | alignWhenCentered () const |
| 返回 alignWhenCentered 属性
|
|
AnchorError | errorCode () const |
| 锚定过程中产生的错误,在一个新的锚定函数被调用之前会清空此错误状态,每次调用锚定函数后,可以通过此函数的返回值来判断锚定设置是否成功。
|
|
QString | errorString () const |
| 对 errorCode 的文本描述信息
|
|
bool | isBinding (const DAnchorInfo *info) const |
| 如果此 info 设置了锚定对象,则返回 true ,否则返回 false
|
|
DAnchorsBase 提供了一种指定 QWidget 与其它 QWidget 之间的关系来确定其位置的方法.
除了比较传统的布局方式之外,DtkWidget 还提供了一种使用锚定概念布局控件的方法( 类似于 QQuickItem 中的 anchors 属性),可以认为每个控件具有一组6个不可见的“锚 线”:left,horizontalCenter,right,top,verticalCenter和bottom,如图所示:
使用 DAnchors 可以让 QWidget 基于这些“锚线”来确定相互间的关系,如:
rect2.setLeft(rect1.right());
这样 rect2 的左边界就会和 rect1 的右边界对齐:
另外还可以同时设置多个“锚线”:
rect2.setTop(rect1.bottom());
rect2.setLeft(rect1.right());
锚定布局同时在多个控件中使用,控件之间只需要满足以下条件:
控件之间为兄弟关系,或被锚定控件为父控件
锚定关系不能循环绑定
锚定的间隔和偏移
锚定系统允许设置“锚线”之间的间距,和“锚线”一一对应,每个控件都有一组4个 margin: leftMargin, rightMargin, topMargin 和 bottomMargin 以及两个 offset: horizontalCenterOffset 和 verticalCenterOffset。
下面是左margin的例子:
rect2.setLeftMargin(5);
rect2.setLeft(rect1.right());
rect2 的左边界相距 rect1 的右边界5个像素:
- 注解
- margin 仅仅是对设置的锚点生效,并不是让控件本身增加了边距,如果设置了 margin,但并没有设置相应的锚点,对控件本身而已是没有任何影响的。margin 的值可以 为负数,通过值的正负来决定margin的方向(内 margin 还是外 margin)
除了基于“锚线”来设置锚定外,另外还有 setCenterIn 和 setFill 这两个比较特殊的 的实现。
判断循环锚定的方式
假设 DAnchorsBase a1, a2; a1.setRight(a2.left()); 则判断 a1 和 a2 之间 会不会存在循环绑定的逻辑为: 尝试更改 a1 右边界的值,更新后如果 a2 左边界的值产出了变化,则认为会导致循环绑 定,否则认为不存在