繁体   English   中英

如何将QIcon转换为QPixmap

[英]How to convert QIcon to QPixmap

我有以下代码,我必须用Qt4代码更改它。

QIcon icon;
QPixmap pixmap = icon.pixmap();    // Qt3 code

为了用Qt4替换Qt3代码,我必须用Qt4提供的以下方法之一替换pixmap()

QPixmap QIcon::pixmap ( const QSize & size, Mode mode = Normal, State state = Off ) const  
QPixmap QIcon::pixmap ( int w, int h, Mode mode = Normal, State state = Off ) const
QPixmap QIcon::pixmap ( int extent, Mode mode = Normal, State state = Off ) const

因为我不知道它在pixmap(void)调用中使用了什么尺寸或尺寸。 因此,我需要找出可以在不要求明确大小的情况下消除此代码的替代方法。

我从这段代码中了解到了什么。 这是图标的大小。 所以我试着找出图标的大小。 但我再也没有找到任何方法来获得图标的大小。

QIcon可能包含多个不同大小的图像,一个通用的 icon.pixmap()过于随意(哪个大小将用于构建QPixmap ?)。 pixmap()方法仍然可用,但您必须指定所需的大小。

如果您知道尺寸,那么您可以简单地使用:

QPixmap pixmap = icon.pixmap(requiredImageSize);

如果你没有(如你的情况)那么你有一些选择。 首先,您可以使用QIcon::actualSize()方法请求具有指定大小(或更小)的图像。

QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(32, 32)));

Suppsing icon包含16x16,24x24和64x64,然后它将返回24x24(最大图像小于您指定的图像)。

第二种方法是使用QIcon::availableSizes()查询最大可用图像(假设宽度和高度始终相等)查询大小:

QList<QSize> sizes = icon.availableSizes();
int maximum = sizes[0].width();
for (int i=1; i < sizes.size(); ++i)
    maximum = qMax(maximum, sizes[i].width());

QPixmap pixmap = icon.pixmap(QSize(maximum, maximum));

请注意,如果您使用第一种方法并指定一个足够大的值,那么您将获得相同的结果:

QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(1024, 1024)));

当然,您也可以选择第一个/最后一个可用尺寸:

QPixmap pixmap = icon.pixmap(icon.availableSizes().first());
QPixmap pixmap = icon.pixmap(icon.availableSizes().last());

QIcon参考文档中描述了几种方法。 例如

QPixmap QIcon::pixmap(const QSize & size, Mode mode = Normal, State state = Off)

您只需要提供所需结果的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM