• 首页
  • Qt文档
  • DTK文档
  • 玲珑文档
  • danchorsbase_zh

    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