Ответ 1
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());