QML ListView间距毛刺

时间:2016-11-29 17:23:22

标签: qt qml qtquick2

我的应用程序中有一个简单的页面:

import QtQuick 2.5
import QtQuick.Controls 2.0

Page {

    ListView {
        anchors.fill: parent
        model: 50
        delegate: Item {
            clip: true
            height: 50
            anchors {
                left: parent.left
                right: parent.right
            }

            Rectangle {
                color: "red"
                anchors.fill: parent
            }
            Label {
                text: index
            }

        }
    }

}

有时,当我滚动时,我会看到行之间的间距,但间距为零。我想它是某种坐标舍入误差。我找到了问题的可能来源 - clip:true在委托中。如果我删除它,那么一切都很好。

这是Qt的错误,我该如何解决它?

enter image description here

2 个答案:

答案 0 :(得分:1)

如果你在修改剪辑时只有那些毛刺,请不要使用它 - 至少不在委托的根节点中。

Page {
    ListView {
        anchors.fill: parent
        model: 50
        delegate: Rectangle {
            clip: false // <-- Do not clip in the delegate's root node
            height: 50
            color: "red"
            anchors {
                left: parent.left
                right: parent.right
            }
            Item {
                anchors.fill: parent
                clip: true // <-- instead you might clip in a delegate's child node
                Label {
                    text: index + 'a very long string that might be clipped at some point'
                }
            }
        }
    }  
}

至少在我的电脑上显示出这些故障。 但是我会尝试不剪辑委托,因为裁剪是一个性能因素,可能会影响特别是当对象移动时(例如滚动ListView

答案 1 :(得分:1)

ListView的pixelAligned属性绝对解决了我的问题

ListView {
    ...
    pixelAligned: true
    ...
}