我请求了我的个人图像提供程序,但是当我调试这几行时,请求的大小总是{-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_size
。requested_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;
}
此代码与标准实现略有不同,因为它允许返回大于其本机大小的图像。适用于纹理,但在您的情况下可能是可取的,也可能不是可取的。