如何将 QStyle::standardIcon/standardPixmap 与 QStyle::StandardPixmap 一起使用?

nda*_*son 5 qt

在我的代码中,有一堆尝试QIconsQStyle标准像素图创建的调用,例如:

QIcon groupIcon;
groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirClosedIcon ),
                     QIcon::Normal, QIcon::Off );
groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirOpenIcon ),
                     QIcon::Normal, QIcon::On );
Run Code Online (Sandbox Code Playgroud)

虽然这可以正常工作,但使用模型的图标 Qt::DecorationRole会根据项目的展开状态显示打开或关闭的图标,但它有两个问题:

  1. 它对高 dpi 不友好,而且图标很小
  2. QStyle::standardPixmap被标记为已过时,并被QStyle::standardIcon描述为首选方法。

我不确定如何将上面的代码翻译成QStyle::standardIcon

QIcon groupIcon( style()->standardIcon( QStyle::SP_DirClosedIcon ) );
Run Code Online (Sandbox Code Playgroud)

对于封闭的项目效果很好,并且在 hidpi 上看起来很棒。但我不知道如何添加状态SP_DirOpenIcon。没有像“ QIcon::addIcon”这样的等效方法QIcon::addPixmap

这里采取的正确方法是什么,它是高 dpi 友好且面向未来的?

sco*_*nov 1

如何将上面的代码翻译为QStyle::standardIcon

为了能够使用QIcon::pixmapQStyle::standardIcon来代替QStyle::standardPixmap,请从图标中选择特定的像素图。

这是我为您准备的一个示例,说明如何更改代码以实现此目的:

QIcon groupIcon;
QSize sz(16, 16);

groupIcon.addPixmap(style()->standardIcon(QStyle::SP_DirClosedIcon).pixmap(sz),
                     QIcon::Normal, QIcon::Off);
groupIcon.addPixmap(style()->standardIcon(QStyle::SP_DirOpenIcon).pixmap(sz),
                     QIcon::Normal, QIcon::On);
Run Code Online (Sandbox Code Playgroud)

16是所要求的尺寸。请注意:

像素图可能比要求的小,但永远不会更大。

因此相应地调整这个值。