在Qt中将光标更改为沙漏/等待/忙碌光标并恢复原样

49

我启动了一个执行长时间操作的进程,我想给出视觉反馈以指示正在发生某些事情,所以我想将光标更改为忙碌状态,并在接收到QProcess::finished信号时恢复光标。

2个回答

88

Qsiris的解决方案是"小部件范围内的"。如果您想为整个应用程序更改光标,则使用

QApplication::setOverrideCursor(Qt::WaitCursor);

QApplication::restoreOverrideCursor();

注意:正如 @Ehsan Khodarahmi 指出的那样,直到触发下一个QT事件或手动调用QApplication::processEvents(),光标才会改变。


15
记住,直到触发下一个QT事件或手动调用QApplication::processEvents(),光标都不会改变。 - Ehsan Khodarahmi
9
我想你的意思是“别忘了”,但是经过一小时的搏斗, “别原谅” 也能很好地发挥作用。谢谢你提醒我。 - David Burson
1
请注意,这种方式不会阻塞用户界面,如果你的应用程序基于QWidget,则可以使用 setEnabled(false) - AntonK
详见:https://doc.qt.io/qt-5/qt.html#CursorShape-enum - Chris P

28

使用此方法在进程开始时设置光标为等待状态:

this->setCursor(Qt::WaitCursor);

并将其用于将光标恢复为正常状态(将其放入QProcess::finished的插槽中)

this->setCursor(Qt::ArrowCursor);

4
为了恢复光标最好使用 unsetCursor()。它会继承父窗口的光标,这是在显式设置光标之前的行为:https://doc.qt.io/qt-5/qwidget.html#cursor-prop - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接