3

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

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

4

1 回答 1

3

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

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

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

于 2012-09-11T09:46:46.817 回答