在我的Qt应用程序中,我正在关闭应用程序时保存一些数据。保存数据在closeEvent(QCloseEvent *)方法中执行。我想在保存数据之前更改光标,并在保存后将其恢复。
根据我在互联网上阅读的内容,setCursor(const QCursor&)不能全局工作,只能在某些指定小部件的范围内工作。因此我尝试使用WinAPI中的SetCursor(HCURSOR)。
代码如下所示:
void mainWin::closeEvent( QCloseEvent* e ) {
SetCursor( LoadCursor( GetModuleHandle( NULL ), ( LPCWSTR )IDC_WAIT ) );
saveData();
SetCursor( LoadCursor( GetModuleHandle( NULL ), ( LPCWSTR )IDC_ARROW ) );
e->accept();
}
但是,第一个SetCursor()方法只是将光标隐藏在数据保存时,而不是将其更改为某种沙漏。为什么呢?
答案 0 :(得分:3)
您应该使用QApplication::setOverrideCursor
,它会更改整个应用程序的光标。
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
saveData();
QApplication::restoreOverrideCursor();
创建光标时,您当然可以提供自己的像素图。
另一个有趣的事情是你可以创建一个RAII类来处理自定义游标。您在构造函数中调用setOverrideCursor
,在析构函数中调用restoreOverrideCursor
。当您有许多想要更改光标的位置并在范围的末尾自动恢复时,这样做非常方便。另一个优点是,如果你的saveData
方法抛出,光标会被重置,这非常好。