【问题标题】:Custom cursor scaling with windows accessibility settings使用 Windows 辅助功能设置自定义光标缩放
【发布时间】:2021-09-13 19:09:44
【问题描述】:

我使用以下方法(在 Qt 6.1.1 中)使用位图实现了 32x32 自定义光标:

this->setCursor(QCursor(QBitmap(":/Cursors/arrow_up.bmp"), QBitmap(":/Cursors/arrow_up_mask.bmp"), 3, 0));

如果应用程序和文本大小的 Windows 显示设置设置为 100%,则光标将按预期工作。但是,如果应用程序的大小和文本设置增加,Qt 会相应地放大自定义光标并使其像素化(例如,如果选择 150%,Qt 会将自定义光标的大小增加 50%)。

有没有办法阻止 Qt 调整自定义光标的大小?或者,有没有办法知道用户在 Windows 中为应用程序和文本的大小选择了什么,以便我可以提供正确分辨率的光标?

【问题讨论】:

    标签: c++ qt qt6


    【解决方案1】:

    试试这个:

    QCursor cursor = QCursor(QIcon(":/Cursors/arrow_up.bmp").pixmap(32, 32), 0, 0);
    this->setCursor(cursor);
    

    表示使用QIcon而不是QBitmap,并通过pixmap(32, 32)设置其大小。

    其他可能对您有帮助的事情:

    将此行放入您的 main.cpp 文件中:

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    

    阅读this 文档。据我了解,设置 AA_EnableHighDpiScaling 标志在支持的平台上启用 Qt 中的高 DPI 缩放(另请参阅高 DPI 显示器)。支持的平台是 X11、Windows 和 Android。启用使 Qt 根据操作系统提供的显示比例因子缩放主要(设备独立)坐标系。这对应于将 QT_AUTO_SCREEN​_SCALE_FACTOR 环境变量设置为 1。

    【讨论】:

    • 谢谢帕丽莎。不幸的是,当使用这种方法时,Qt 仍然会放大光标(尽管它的像素化程度比直接使用位图要少一些)。
    • 欢迎您,尝试使用光标图标SVG 文件而不是bmp 文件。
    • 我尝试使用 svg 文件代替,当 Qt 放大它时,它看起来仍然有点模糊。似乎 Qt 将大小设置为 32x32,然后从那里放大它而不是普通图标,您可以在其中提供更高分辨率的图像,Qt 将其缩小以适合指定的图标大小。
    • 所以,我认为最好有多个图标。在不同的大小和分辨率下并设置一些条件,如果更改屏幕分辨率图标发生变化,我认为在 Windows 或 Linux 等操作系统中会这样做。
    • 我同意。这似乎是最好的解决方案。但是,Qt 似乎假设您提供的大小基于 Windows 上的 100% 文本大小设置(即 pixelDeviceRatio = 1),然后无论如何都会向上缩放光标。因此,即使我为 pixelDeviceRatio = 2 提供 64x64 光标,Qt 也会采用它并再次放大它。关于如何阻止 Qt 应用比例因子的任何想法?
    猜你喜欢
    • 2010-10-24
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多