我感觉好像缺少了一些东西,因为我看不到任何可以轻松地在Qt中进行跨平台游标的方法。也就是说,我想使用标准的游标编辑器,或者只是普通的游标文件类型,并将其粘贴到资源文件中。
我看到几种特定于平台的方式提供句柄(这意味着我无法从资源中加载)或采用像素图的通用方式。然后,在pixmap方法中,我将不得不找到某种方式来将热点与pixmap一起存储。
我不需要动画光标,而只是纯彩色图像(32x32)。
最简单的方法是什么?
我目前正在开发一个我想要一些漂亮的自定义光标的应用程序。我这样做的方式是:
将图像添加到Qt资源文件(*.qrc)-我正在使用从SVG导出的具有透明性的PNG(在需要缩放的情况下,始终在SVG中使用原始图片来源)
<RCC>
<qresource prefix="/">
<file alias="default">cursors/cursor_default.png</file>
</qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)
由于Qt资源文件已转换为C ++源代码,然后将其添加到二进制文件中,因此这将使您可以将光标与应用程序一起发送
在您的源代码中执行:
QPixmap cursor_pixmap = QPixmap(":cursor_default");
QCursor cursor_default = QCursor(cursor_pixmap, 0, 0);
setCursor(cursor_default);
Run Code Online (Sandbox Code Playgroud)
这里有两个重要的注意事项,都与的构造函数有关QCursor-添加到它的像素图和热点坐标(此处都设置为0代表光标形状的像素图的左上角)。实际上,这里有2个构造函数对QCursor恕我直言有用:
QCursor::QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1) -这使您可以使用遮罩来操纵光标的像素 QCursor::QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1) -如果您使用允许透明的PNG或其他受支持的图像格式,则可以按照我的情况忽略遮罩。热点是光标的一个非常重要的部分-它告诉您的应用程序,光标的哪一部分是“触发”,与其他仅是精美视觉效果且没有任何功能的其余部分相比,该热点可以做些什么。
在寻找有关游标Qt定制的资源时,我发现了这篇文章(上图是的),我可以完全推荐所有对此主题感兴趣的人阅读。
在存储热点方面,我认为不需要这样的事情。在将所有资源文件编译并添加到二进制文件之后,因此,当您在代码内为光标分配热点时,热点就会在那里。我怀疑任何操作系统实际上是否都具有同时存储光标及其热点的格式(更不用说多平台了),原因是您可能要根据应用程序更改热点(例如,由于缩放位图本身) (以具有多个尺寸),如果将其绑定到光标的位图,则难度会更大。如果您真的想对此有所了解(我建议您这样做),则可以创建自己的包含两种格式的自定义文件格式。
希望这可以帮助。上面的解决方案与Qt框架一样,是跨平台的。但是请注意,该自定义QCursor仅在您的应用程序内部以及您在其中设置的任何位置都可用。例如,位于窗口框架上方的光标被认为是特定于OS的,这是因为窗口框架本身是特定于操作系统的功能,如果要更改其行为,则必须更深一些(而且在Qt之外)安全区域)。
| 归档时间: |
|
| 查看次数: |
4401 次 |
| 最近记录: |