gpt4 book ai didi

qt - Qt的跨平台自定义游标,资源文件中的游标

转载 作者:行者123 更新时间:2023-12-03 23:17:50 26 4
gpt4 key购买 nike

我觉得我错过了一些东西,因为我看不到任何方法可以轻松地在 Qt 中进行跨平台游标。也就是说,我想使用一个标准的光标编辑器,或者只是一个普通的光标文件类型,并将其粘贴到资源文件中。

我看到一些特定于平台的方式提供句柄(意味着我无法从资源加载)或采用像素图的通用方式。在像素图方法中,我必须找到某种方式来存储热点和像素图。

我不想要动画光标,只想要一个纯色图像(32x32)。

处理此问题的最简单方法是什么?

最佳答案

我目前正在开发一个我想要一些不错的自定义光标的应用程序。我这样做的方式是:

  • 将图像添加到 Qt 资源文件 ( *.qrc ) - 我正在使用从 SVG 导出的具有透明度的 PNG(如果您需要缩放,请始终将原始艺术资源保存在 SVG 中以用于此类事情)
     <RCC>
    <qresource prefix="/">
    <file alias="default">cursors/cursor_default.png</file>
    </qresource>
    </RCC>

  • 由于 Qt 资源文件被转换为 C++ 源代码,然后将其添加到二进制文件中,这将允许您随应用程序一起发送游标
  • 在您的源代码中执行以下操作:
     QPixmap cursor_pixmap = QPixmap(":cursor_default");
    QCursor cursor_default = QCursor(cursor_pixmap, 0, 0);
    setCursor(cursor_default);

  • 这里有两件重要的事情需要注意,它们都与 QCursor 的构造函数有关。 - 添加到它的像素图和热点坐标(这里都设置为 0,它是像素图的左上角,代表光标的形状)。 QCursor 实际上有 2 个构造函数恕我直言,这在这里很有用:
    - `QCursor::QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1)` - this allows you to use a mask to manipulate the pixels of your cursor 
    - `QCursor::QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1)` - if you are working with a PNG or other supported image format which allows transparency you can omit the mask as it is in my case.
    热点是光标的一个非常重要的部分——它告诉您的应用程序光标的哪一部分是“触发器”,与其余部分相比,它是做某事的地方,其余部分只是花哨的视觉效果,没有任何功能。
    enter image description here
    在寻找有关 Qt 游标自定义的资源时,我发现了 this article (上图来自它),我完全可以推荐每个对这个主题感兴趣的人阅读。
    在存储热点方面,我认为没有必要这样做。在编译完所有资源文件并将其添加到二进制文件后,因此当您将热点分配给代码中的光标时,它就会在那里。我怀疑任何操作系统实际上都具有存储光标及其热点的格式(更不用说多平台格式),因为根据应用程序您可能想要更改热点(例如,由于缩放位图本身)为了有多种尺寸),如果你将它绑定(bind)到光标的位图,这将更加困难。如果您真的想在这方面走得更远(我建议不要这样做),您可以创建自己的自定义文件格式,其中包含两者。由于 Qt 资源文件 - 据我所知 - 用于管理图像,因此您必须实现整个 IO 机制才能支持您的自定义格式。
    希望这可以帮助。上面的解决方案与 Qt 框架一样是跨平台的。但是请注意,自定义 QCursor将仅在您的应用程序内部以及您设置它的任何位置可用。例如,窗口框架上方的光标被认为是特定于操作系统的,因为窗口框架本身是操作系统特定的功能,如果您想更改它的行为你将不得不更深入(并且也在 Qt 的安全区域之外),这意味着检查游标在操作系统级别上的处理方式。

    关于qt - Qt的跨平台自定义游标,资源文件中的游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5455584/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com