我有以下代码,我必须用Qt4代码更改它.
QIcon icon;
QPixmap pixmap = icon.pixmap(); // Qt3 code
Run Code Online (Sandbox Code Playgroud)
为了用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
Run Code Online (Sandbox Code Playgroud)
由于我不知道它在此调用中使用的大小或尺寸pixmap(void).因此,我需要找出可以在不要求明确大小的情况下消除此代码的替代方法.
我从这段代码中了解到了什么.这是图标的大小.所以我试着找出图标的大小.但我再也没有找到任何方法来获得图标的大小.
Adr*_*tti 22
QIcon可能包含不同大小的多个图像,一般 icon.pixmap()是太随意(哪个大小将用于构建QPixmap?).pixmap()方法仍然可用,但您必须指定所需的大小.
如果您知道尺寸,那么您可以简单地使用:
QPixmap pixmap = icon.pixmap(requiredImageSize);
Run Code Online (Sandbox Code Playgroud)
如果你没有(如你的情况)那么你有一些选择.首先,您可以使用QIcon::actualSize()方法要求指定尺寸(或更小)的图像.
QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(32, 32)));
Run Code Online (Sandbox Code Playgroud)
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));
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用第一种方法并指定一个足够大的值,那么您将获得相同的结果:
QPixmap pixmap = icon.pixmap(icon.actualSize(QSize(1024, 1024)));
Run Code Online (Sandbox Code Playgroud)
当然,您也可以选择第一个/最后一个可用尺寸:
QPixmap pixmap = icon.pixmap(icon.availableSizes().first());
QPixmap pixmap = icon.pixmap(icon.availableSizes().last());
Run Code Online (Sandbox Code Playgroud)