PySide6中的高分屏缩放

April 3, 2021 · 分享 · 58次阅读

切换到PySide6,感觉之前的AA_EnableHighDpiScaling不起作用了

经过一番查询,在官方的github找到了一点说明,Class/Function Deprecations

The High DPI scaling attributes Qt.AA_EnableHighDpiScaling, Qt.AA_DisableHighDpiScaling and Qt.AA_UseHighDpiPixmaps are deprecated. High DPI is by default enabled in Qt 6 and cannot be turned off.

也就是说从6开始,这三个高分屏缩放的API都无了,默认强制开启以及不能关闭,不过问题是并没有感觉到它缩放ORZ

最后在文档中查询到有API是可以调整缩放策略的,搜索HighDpiScaleFactorRoundingPolicy就能找到

  • Qt.HighDpiScaleFactorRoundingPolicy.Round 设备像素比0.5及以上的,进行缩放
  • Qt.HighDpiScaleFactorRoundingPolicy.Ceil 始终缩放
  • Qt.HighDpiScaleFactorRoundingPolicy.Floor 始终不缩放
  • Qt.HighDpiScaleFactorRoundingPolicy.RoundPreferFloor 设备像素比0.75及以上的,进行缩放
  • Qt.HighDpiScaleFactorRoundingPolicy.PassThrough 不缩放

也许你看完可能还是有些不明白,一开始我也是

然后找到官方widgetgallery.py这个案例,取了部分代码,如下,可以配合这个运行你的GUI,看看各个情况的效果

def format_geometry(rect):
    """Format a geometry as a X11 geometry specification"""
    return "{}x{}{:+d}{:+d}".format(rect.width(), rect.height(), rect.x(), rect.y())


def screen_info(widget):
    """Format information on the screens"""
    policy = QGuiApplication.highDpiScaleFactorRoundingPolicy()
    policy_string = str(policy).split('.')[-1]
    result = "<p>High DPI scale factor rounding policy: {}</p><ol>".format(policy_string)
    for screen in QGuiApplication.screens():
        current = screen == widget.screen()
        result += "<li>"
        if current:
            result += "<i>"
        result += '"{}" {} {}DPI, DPR={}'.format(screen.name(), format_geometry(screen.geometry()), int(screen.logicalDotsPerInchX()), screen.devicePixelRatio())
        if current:
            result += "</i>"
        result += "</li>"
    result += "</ol>"
    return result

用这里得到的结果,显示策略是PassThrough,难怪没感觉到缩放(4K+win10+150%)

<p>High DPI scale factor rounding policy: PassThrough</p><ol><li><i>"\\.\DISPLAY1" 2560x1440+0+0 96DPI, DPR=1.5</i></li></ol>

最终我选择了始终缩放的策略,通过下面的代码即可设定,注意代码应该放到gui界面实例化之前

QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.Ceil)

ENJOY 0

none

最后编辑于5个月前

添加新评论

avatar

未末

118

文章数

256

评论数

7

分类

新鲜出炉の评论

XstreamDL-CLI BUG修复记录
Andist
Andist2021-09-17

en……实在不好意思,代理我知道怎么启用了。我只勾选了自定义代理,但没有填写proxy参数,我太愚钝了对不起!!!

XstreamDL-CLI BUG修复记录
Andist
Andist2021-09-17

感谢您开发的这款软件,对于第一次下载mpd的小白而言很友好! 这段时间用下来就是有时候下载直连的海外视频流时可能因为网络状况不佳,会有下载不完整的问题,下载完进度没到100%,但是也合并解密了,不知道能否增加下载不完整在最后输出报错信息的功能呢? 以及我想请教一下如何让下载器使用小飞机的代理呢?我尝试在“使用自定义代理”的选项上勾选,但是好像命令行中没有变化? (另外我猜您图中的样本是在下载CP+上的用九柑仔店是吗?我也很喜欢这部剧,是我心目中排名第一的台剧哈哈)

XstreamDL-CLI BUG修复记录
未末
未末2021-09-16

要批量下载可以通过传入文件夹,文件夹内放要下载的m3u8。 要批处理调用建议使用N_m3u8DL-CLI。 你后面说的这个准确来说是混流操作,考虑到dash流,master m3u8的复杂性,目前不提供混流功能,这不是bug。混流请自行手动完成

白嫖某视频网站widevine解密key
未末
未末2021-09-16

用mp4dump查看对应视频的kid,对应使用

XstreamDL-CLI BUG修复记录
dehooy
dehooy2021-09-15

发现命令行并没有针对本地M3U8下载完成后输出文件名的参数,批处理测试会自动启动本地M3U8的文件名,这不方便批处理调用。另外 ,测试发现关于音视频分流的情况,下载解密后并不会合并这两路流,这是一个BUG,可参考某酷CMAF类型WV加密的M3U8