Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何将QStyle::standardIcon/standardPixmap与QStyle::standardPixmap一起使用?_Qt - Fatal编程技术网

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

Qt 如何将QStyle::standardIcon/standardPixmap与QStyle::standardPixmap一起使用?,qt,Qt,在我的代码中,有一组调用试图从 QStyle标准像素贴图,如: QIcon groupIcon; groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirClosedIcon ), QIcon::Normal, QIcon::Off ); groupIcon.addPixmap( style()->standardPixmap( QStyle::SP_DirOpenIcon ),

在我的代码中,有一组调用试图从
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
根据项目的属性显示打开或关闭的图标 在扩展状态下,它有两个问题:

  • 它对hi-dpi不友好,而且图标很小
  • QStyle::standardPixmap
    被标记为过时,而
    QStyle::standardcicon
    被描述为首选方法
  • 但我不确定如何将上述代码翻译成
    QStyle::standardIcon

    QIcon groupIcon( style()->standardIcon( QStyle::SP_DirClosedIcon ) );
    
    适用于封闭项目,在hidpi上看起来很棒。但我不知道如何添加
    SP_DirOpenIcon
    状态。没有像
    QIcon::addIcon
    那样的等效方法

    在这里,应该采取什么样的正确方法,即hi dpi友好型和未来证明

    如何将上述代码转换为QStyle::standardIcon

    要能够使用
    QStyle::standardIcon
    而不是
    QStyle::standardPixmap
    ,请使用从图标中选择特定的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
    是请求的尺寸。请注意:

    pixmap可能比请求的小,但永远不会大


    因此,相应地调整此值。

    此方法的问题在于它依赖于预先了解图标大小,因此失去了QIcon在渲染时缩放图标的能力。所以很遗憾,这种方法与hi-dpi不兼容。@ndawson,你知道还有其他方法吗?很遗憾,没有,这正是我想要找到的@恩道森,没错。不管你喜欢与否,如果你想把你的代码翻译成使用standardIcon而不是standardPixmap,这就是你的方法。找到其他解决方案了吗?如果是,你介意分享吗?如果不是,你可能还是会接受答案,因为它是正确的,而且是有效的。不,我还没有找到一种方法是友好的。实际上,我们只是放弃了使用QStyle::standardIcon,转而提供定制的替换图标。我仍然希望找到一个符合这里主要标准的答案——结果图标是可伸缩的,并且在低/高dpi显示器上正常工作。