c++ - 如何将 QIcon 转换为 QPixmap

标签 c++ qt qt4 qt3

我有以下代码,我必须用 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 可能包含多个不同大小的图像,generic icon.pixmap() 太随意了(将使用哪个大小构建QPixmap?)。 pixmap() method仍然可用,但您必须指定所需的尺寸。

如果你知道大小,那么你可以简单地使用:

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++ - 如何将 QIcon 转换为 QPixmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27034457/

相关文章:

c++ - 将自定义参数传递给 Qt/C++ 中的插槽

ruby - QtRuby GridLayout- 未定义的方法 'addWidget'

qt - 从QObject外部显示并获取QMessageBox的结果

c++ - 分配函数的数组版本

c++ - 使用 std::accumulate 和 std::string 有效

c++ - 整数除法算法

c++ - Qt 反转选项卡 QTabWidget?

c++ - 为什么指向成员函数的指针不像数据指针那样只是内存地址

qt - 如何防止 QChartView 缩放到负 x 或 y 轴值

qt - 如何为Qt项目的一个子目录调用make install