2012-03-25 167 views
2

我有项目委托,当鼠标事件结束图标时,我将其光标更改为Qt :: PointingHandCursor 当它关闭时,我将其设置回Qt :: ArrowCursor。它的工作正常。
问题是,除了它在图标上时。它总是堆叠在Qt :: ArrowCursor 上,即使在图标需要像本地调整窗口大小或通过本机按钮时那样改变的情况下。它总是Qt :: ArrowCursor。
当它不在图标上时,我该如何强制光标正常动作?
这里是我做的:Qt鼠标光标重置

​​

回答

4

您需要使用restoreOverrideCursor()给每个呼叫撤消setOverrideCursor()。从文档:

http://doc.qt.io/archives/qt-4.7/qapplication.html#setOverrideCursor

应用游标被存储到内部栈中。 setOverrideCursor()将光标推入堆栈,并且restoreOverrideCursor()将活动光标弹出堆栈。 changeOverrideCursor()更改当前活动的应用程序 覆盖光标。每一个setOverrideCursor()必须最后被相应的restoreOverrideCursor()跟在 之后,否则堆栈将永远不会被清空。

你必须弄清楚究竟是如何使这项工作在你的代码(这是不完全清楚自己想要什么样的行为),但你可以通过更换该else条款

{ 
    Qt::CursorShape shape = Qt::ArrowCursor; 
    QApplication::setOverrideCursor(QCursor(shape)); 
} 

启动

{ 
    QApplication::restoreOverrideCursor(); 
}