更改光标会隐藏光标

时间:2012-09-11 09:41:33

标签: c++ qt winapi

在我的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()方法只是将光标隐藏在数据保存时,而不是将其更改为某种沙漏。为什么呢?

1 个答案:

答案 0 :(得分:3)

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

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

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