Как конвертировать 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)
где вы только должны указать размер желаемого результата.