QML中的图像图集

Image atlas in QML

我有这样一张图片: http://www.imagemagick.org/Usage/basics/result.gif (它包含两行单独的数据:上面一行是三个正方形图像,下面是另一个正方形和两个 'empty' 个正方形)

我想在转发器中使用它,这样我就有了四个图像按钮,每个按钮都有一个子图像。

QML 中有 "texture-atlas" 个模块吗?

我只找到了 http://doc.qt.io/qt-5/qml-qtquick-sprite.html,我希望有更适合我的用例的东西。

正如我在评论中所说,我会使用 QQuickImageProvider 来做到这一点,因为这是最快且占用内存最少的方式。但是 QML 非常灵活,您可以随心所欲地使用它。关于你的问题,你可以按以下方式进行:

Tile.qml

import QtQuick 2.9

Item {
    id: container
    property alias source: img.source
    property int cellWidth: 1
    property int cellHeight: 1
    property int slideIndex: 0
    clip: true
    Image {
        id: img
        property int cols: img.paintedWidth / container.cellWidth
        property int rows: img.paintedHeight / container.cellHeight
        x: -container.cellWidth * Math.floor(container.slideIndex % cols)
        y: -container.cellHeight * Math.floor(container.slideIndex / cols)
    }
}

和用法:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    id: window
    title: "Test"
    visible: true
    width: 600
    height: 400

    Row {
        spacing: 10
        anchors.centerIn: parent
        Repeater {
            model: 4
            Tile {
                width: 32
                height: 32
                cellWidth: 32
                cellHeight: 32
                slideIndex: index
                source: "http://www.imagemagick.org/Usage/basics/result.gif"
            }
        }
    }
}

想法是将整个图像包裹到一个容器中并适当地剪裁它。这里我使用index-based访问幻灯片,你可以随意使用。