Qt 应用程序的默认鼠标图标

Posted

技术标签:

【中文标题】Qt 应用程序的默认鼠标图标【英文标题】:Default mouse icons for Qt applications 【发布时间】:2014-09-17 06:11:39 【问题描述】:

如何在 Qt 应用程序中设置默认系统鼠标图标?

据我所知,Qt 有一组特殊的光标图标(与操作系统或光标主题附带的光标不同)。

...
<button style="cursor: pointer;">Test mouse cursor</button>
...

以手鼠标图标为例:

在操作系统级别设置默认手形光标。


Qt游标——即与操作系统游标不同。

我想使用在操作系统级别设置的鼠标图标主题,而不是使用 Qt 光标主题。

我该怎么做?

【问题讨论】:

您希望不同的鼠标光标具体何时出现?在某个小部件之上?在整个应用程序窗口上方?甚至在应用程序窗口之外? @Silicomancer 在整个应用程序中。我想使用普通的手形图标(在操作系统级别配置),而不是 Qt 环境中的。 只是一个想法,以前从未使用过这个......你在主窗口上尝试过 QWidget::setCursor() 吗? @Silicomancer 我想我还不够清楚。设置光标不是问题,但光标主题是问题。查看编辑。 @IonicăBizău 所以如果你想要另一个光标,那么你可以下载你需要的光标(图片)并将其安装为像素图,正如我在回答中所写的那样。 【参考方案1】:

您可以使用setOverrideCursor 更改整个应用程序中的光标。只需在 main 或 MainWindow 的构造函数中调用它:

qApp->setOverrideCursor(QCursor(Qt::PointingHandCursor));

【讨论】:

查看我的编辑:我试图澄清一些事情。我想使用默认光标主题而不是 Qt 光标主题。【参考方案2】:

但是setOverrideCursor() 有一个缺点。正如文档所说:

将应用程序覆盖光标设置为光标。

应用程序覆盖光标旨在向用户显示应用程序处于特殊状态,例如在可能需要一些时间的操作期间。

在调用 restoreOverrideCursor() 或另一个 setOverrideCursor() 之前,此光标将显示在所有应用程序的小部件中。

应用程序游标存储在内部堆栈中。 setOverrideCursor() 将光标压入堆栈,而 restoreOverrideCursor() 将活动光标从堆栈中弹出。 changeOverrideCursor() 更改当前活动的应用程序覆盖光标。

每一个 setOverrideCursor() 最终都必须跟一个对应的 restoreOverrideCursor() ,否则堆栈永远不会被清空。

链接:http://qt-project.org/doc/qt-4.8/qapplication.html#setOverrideCursor

这意味着所有的小部件都会有这个光标并且你不能改变它。所以我有下一个解决方案:

将光标设置到您的主窗口,它将是默认光标,但您可以更改您想要的每个小部件的光标,但主窗口的光标将是默认的。

例如:

this->setCursor(QCursor(Qt::PointingHandCursor));//it is default cursor
//qApp->setOverrideCursor(QCursor(Qt::PointingHandCursor));

QPixmap pix("path");
QCursor cur(pix);
ui->textEdit->viewport()->setCursor(cur);//when we hover the textEdit we get this pixmap as cursor.

【讨论】:

以上是关于Qt 应用程序的默认鼠标图标的主要内容,如果未能解决你的问题,请参考以下文章

QT:标题栏隐藏图标和隐藏后移动窗口

css 如何改变鼠标图标

WPF:设置MenuItem多种不同状态图标

Qt 怎么获取系统拖盘的鼠标进入和离开事件

应用程序停止后Qt关闭托盘图标

如何将动态图片变成鼠标指针?