更改光标会隐藏光标

Changing cursor hides the cursor

本文关键字:光标 隐藏      更新时间:2023-10-16

在我的Qt应用程序中,当应用程序关闭时,我正在保存一些数据。保存数据是在closeEvent(QCloseEvent*)方法中执行的。我想在保存数据之前更改光标,并在保存后将其恢复。

根据我在互联网上读到的内容,setCursor(constQCursor&)不能全局工作,只能在某些特定小部件的范围内工作。因此,我尝试使用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()方法只是在保存数据时隐藏光标,而不是将其更改为某种沙漏。为什么?

您应该使用QApplication::setOverrideCursor,它将更改整个应用程序的光标。

QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
saveData();
QApplication::restoreOverrideCursor();

当然,当您创建光标时,您可以提供自己的像素图。您可以做的另一件有趣的事情是创建一个RAII类来处理自定义光标。在构造函数中调用setOverrideCursor,在析构函数中调用restoreOverrideCursor。当您有很多地方想要更改光标并在范围的末尾自动恢复光标时,这样做非常方便。另一个优点是,如果saveData方法抛出,那么无论如何都会重置光标,这非常好。