QQuickImageProvider "requestedSize"始终无效



我请求了我的个人图像提供程序,但是当我调试这几行时,请求的大小总是{-1,-1}

class XdgIconThemeImageProvider : public QQuickImageProvider
{
public:
    XdgIconThemeImageProvider() : QQuickImageProvider(QQuickImageProvider::Pixmap){}
    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
    {
        QIcon ico = QIcon::fromTheme(id);
        QPixmap pm =  ico.isNull() ? QPixmap() : ico.pixmap(100,100);
        *size = pm.size();
        return pm;
    }
};

qmlfile

Image {
    id: icon
    source: model.decoration
    width: parent.height
    height: width
    anchors.centerIn: parent
}

我做错了什么吗?

这是您传递给 Image QML 元素的 sourceSize 属性的内容。

如何处理该值:如果(!requested_size.isValid() || requested_size.isNull())则给出本机大小,否则适合requested_sizerequested_size的一个分量中的零意味着相应的维度是无界的。

如何处理该值(假设native_size(texture_handle)返回图像的默认大小):

const QSize size = native_size(texture_handle);
if (requested_size.isValid()) {
    const QSize bounding_size(requested_size.width() > 0 ? requested_size.width() : size.width(), requested_size.height() > 0 ? requested_size.height() : size.height());
    // If requested_size.isEmpty() then the caller don't care how big one or two dimensions can grow.
    return size.scaled(bounding_size, requested_size.isEmpty() && (requested_size.width() > size.width() || requested_size.height() > size.height()) ? Qt::KeepAspectRatioByExpanding : Qt::KeepAspectRatio);
} else {
    return size;
}

此代码与标准实现略有不同,因为它允许返回大于其本机大小的图像。适用于纹理,但在您的情况下可能是可取的,也可能不是可取的。

相关内容

  • 没有找到相关文章