如何将 QIcon 转换为 QPixmap
How to convert QIcon to QPixmap
我有以下代码,我必须用Qt4代码更改它。
QIcon icon;
QPixmap pixmap = icon.pixmap(); // Qt3 code
为了用Qt4替换Qt3代码,我必须用Qt4提供的以下方法之一替换pixmap()
。
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)
调用中使用了什么尺寸或尺寸.所以我需要找出可以消除此代码而无需明确询问大小的替代方案。
我从这个代码段中了解到什么。它正在占用图标的大小。所以我试着找出图标的大小。但是我再次找不到任何方法来获取图标的大小。
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());
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何将QPixMap转换为QPainterPath,反之亦然
- 将 GDI Plus 位图转换为 QPixmap
- 将原始像素数据转换为qpixmap
- Qt:将QPixmap保存到std::vector<无符号字符>-或者将QByteArray转换为std::
- 从SDL_Surface到QPixmap的高效转换
- Qt将数据转换为QPixmap
- 如何将 QIcon 转换为 QPixmap
- 转换Leptonica像素对象到QPixmap(或其他图像对象)
- 将Mat转换为QPixmap