1

当我在其中添加一个子项时将Flickable其锚定在整个控件的左侧,但我希望flickable将子项锚定在整个控件的右侧(我认为当 flickable 内部有任何内容时,它的 flickableItemimplicitWidth 会影响整个控件的宽度,这就是为什么我不能使用anchors.right = parent.right),在 flickable 中没有layoutDirection属性Flickable并且LayoutMirroring不工作,我如何强制 Flickable 从其身体的右边距绘制孩子?
这是我的轻弹控件:

// ScrollableItem.qml

Flickable{
    id:root
    contentWidth: pane.implicitWidth
    contentHeight: pane.implicitHeight
    boundsBehavior: Flickable.StopAtBounds
    flickableDirection: Flickable.AutoFlickIfNeeded
    default property alias content : pane.contentItem

    Pane{
        id:pane
    }
    ScrollIndicator.vertical: ScrollIndicator{

    }
    ScrollIndicator.horizontal: ScrollIndicator{

    }
}

我像这样使用它:

ScrollableItem{
   width : parent.width
   height : parent.height
   RowLayout{
      spacing: 500
      layoutDirection: Qt.RightToLeft
      Button{
      }
      Button{
      }
      Button{
      }
   }
}

Qml 不在乎width : parent.widthScrollableItem如果我在控件内设置宽度,它不会轻弹,我也尝试在孩子中使用 anchors.right,但没有用。有没有办法强迫可轻弹的孩子从屏幕右侧流出?

更新:让我给你看一张照片 在此处输入图像描述

你看到窗格锚定在哪里了吗?将窗格锚定到右侧是不可能的,并且没有布局方向,窗格的宽度取决于子宽度,这是一个 rowLayout,因此如果窗格宽度低于可滑动宽度,它将始终绘制在我想要绘制的可滑动的左边缘flickable 的右边缘

4

1 回答 1

2

实际上,Flickable在逻辑上不应该具有锚定功能。所以你需要明确地将Flickable向右移动:

// ScrollableItem.qml
Flickable{
    id:root
    contentWidth: pane.implicitWidth
    contentHeight: pane.implicitHeight
    boundsBehavior: Flickable.StopAtBounds
    flickableDirection: Flickable.AutoFlickIfNeeded
    default property alias content : pane.contentItem
    leftMargin: pane.contentWidth >= root.width ? 0 : root.width - pane.contentWidth
    contentX:  pane.mirrored ? pane.width : 0;
    property var lastWidth : 0

    Pane{
        id:pane
    }

    onWidthChanged: {
        contentX += lastWidth-width
        lastWidth = width;
    }

    ScrollIndicator.vertical: ScrollIndicator{}
    ScrollIndicator.horizontal: ScrollIndicator{}
}

我像这样使用它:

    ScrollableItem{
       width : parent.width
       height : parent.height

       LayoutMirroring.enabled: true
       LayoutMirroring.childrenInherit: true

       RowLayout{
          spacing: 500
          layoutDirection: Qt.RightToLeft
          Button{
          }
          Button{
          }
          Button{
          }
       }
    }

这对我来说效果很好。当 的pane宽度小于Flickable时,您应该添加剩余空间以leftMargin将内容保持在右侧。

于 2019-12-05T07:12:40.093 回答