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

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


person Jai    schedule 20.11.2014    source источник
comment
Для этого существуют статические методы QIcon::pixmap() (из документации)   -  person Adriano Repetti    schedule 20.11.2014
comment
Вы видели документацию QIcon? qt-project.org/doc/qt-5/qicon.html   -  person JKSH    schedule 20.11.2014
comment
пожалуйста, обратитесь к вопросу еще раз. Я обновил его для большего описания.   -  person Jai    schedule 20.11.2014


Ответы (1)


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

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

QPixmap pixmap = icon.pixmap(requiredImageSize);

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

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

Предположим, что 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());
person Adriano Repetti    schedule 21.11.2014
comment
Для второго метода это может быть немного лучше, а может и нет: QSize max(0, 0); for(QList<QSize> sizes = icon.availableSizes(); !sizes.isEmpty(); sizes.removeFirst()) if(sizes.first().width() > max.width()) max = sizes.first(); QPixmap pixmap = icon.pixmap(max); - person bur; 01.11.2018