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 应用程序的默认鼠标图标的主要内容,如果未能解决你的问题,请参考以下文章