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

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

11

Решение

QIcon может содержать несколько изображений с разными размерами, общий icon.pixmap() слишком много произвольно (какой размер будет использоваться для построения QPixmap?). pixmap() метод все еще доступен, но вы должны указать, какой размер вы хотите.

Если вы знаете размер, то вы можете просто использовать:

QPixmap pixmap = icon.pixmap(requiredImageSize);

Если вы этого не сделаете (как в вашем случае), то у вас есть несколько альтернатив. Сначала вы можете попросить изображение с указанным размером (или меньше), используя QIcon::actualSize() метод.

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

Suppsing icon содержит 16×16, 24×24 и 64×64, тогда он вернет 24×24 (самое большое изображение меньше, чем вы указали).

Второй вариант — выбрать самое большое доступное изображение (при условии, что ширина и высота всегда равны), запрашивая размеры с помощью 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());
19

Другие решения

Есть несколько методов, описанных в QIcon справочная документация. Например

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

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

3

По вопросам рекламы [email protected]