【问题标题】:How to use QStyle::standardIcon/standardPixmap with QStyle::StandardPixmap?如何将 QStyle::standardIcon/standardPixmap 与 QStyle::StandardPixmap 一起使用?
【发布时间】:2018-11-07 02:19:09
【问题描述】:

在我的代码中,有很多调用试图从 QStyle 标准像素图,例如:

QIcon groupIcon;
groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirClosedIcon ),
                     QIcon::Normal, QIcon::Off );
groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirOpenIcon ),
                     QIcon::Normal, QIcon::On );

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

  1. 它不支持 hi-dpi,而且图标很小
  2. QStyle::standardPixmap 被标记为过时,QStyle::standardIcon 被描述为首选方法。

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

QIcon groupIcon( style()->standardIcon( QStyle::SP_DirClosedIcon ) );

非常适合封闭的项目,并且在 hidpi 上看起来很棒。但我看不到如何添加SP_DirOpenIcon 状态。没有像“QIcon::addIcon”这样的等效方法,就像QIcon::addPixmap一样。

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

【问题讨论】:

  • 运气好能找到另一个解决方案吗?如果是的话,你介意分享一下吗?如果不是,你可能会接受这个答案,因为它是正确的并且有效。
  • 不 - 我无法在这里找到一种友好的方法。结果,我们实际上只是放弃了使用 QStyle::standardIcon 并提供自定义替换图标。我仍然很想在这里找到一个符合主要标准的答案 - 生成的图标是可扩展的,并且在低/高 dpi 显示器上正常工作。

标签: qt


【解决方案1】:

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

要能够使用QStyle::standardIcon 而不是QStyle::standardPixmap,请从带有QIcon::pixmap 的图标中选择特定的像素图。

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

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);

这里16 是请求的大小。请注意:

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

因此相应地调整此值。

【讨论】:

  • 这种方法的问题在于它依赖于事先了解图标大小,因此失去了 QIcon 在渲染时缩放图标的能力。所以不幸的是,这种方法不兼容 hi-dpi。
  • @ndawson,您知道其他方法吗?
  • 很遗憾没有,这就是我想要找到的!
  • @ndawson,没错。不管你喜不喜欢,如果你想翻译你的代码以使用standardIcon而不是standardPixmap,这就是它的完成方式。
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2016-11-04
  • 2021-10-23
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多