Как конвертировать QIcon в QPixmap

у меня есть следующий код, и я должен изменить его код на Qt4.

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

для замены кода Qt3 на Qt4 я должен заменить pixmap() С одним из следующих методов, предоставляемых Qt4.

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). Поэтому мне нужно найти альтернативу, которая может устранить этот код, не спрашивая явно размер.

что я понимаю из этого сегмента кода. Он принимает размер икона. Поэтому я пытаюсь выяснить размер значка. Но опять же я не нахожу никакого способа получить размер значка.

2 ответов


QIcon может содержать несколько изображений разных размеров, a generic 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)

где вы только должны указать размер желаемого результата.