C++ 更改光标将隐藏光标
在我的Qt应用程序中,我在关闭应用程序时保存一些数据。在closeEvent(QCloseEvent*)方法中执行数据保存。我想在保存数据之前更改光标,并在保存后恢复 从我在互联网上读到的内容来看,setCursor(constqcursor&)不是全局工作的,而是只在某些特定小部件的范围内工作。因此,我尝试使用WinAPI中的SetCursor(HCURSOR) 代码如下所示:C++ 更改光标将隐藏光标,c++,qt,winapi,C++,Qt,Winapi,在我的Qt应用程序中,我在关闭应用程序时保存一些数据。在closeEvent(QCloseEvent*)方法中执行数据保存。我想在保存数据之前更改光标,并在保存后恢复 从我在互联网上读到的内容来看,setCursor(constqcursor&)不是全局工作的,而是只在某些特定小部件的范围内工作。因此,我尝试使用WinAPI中的SetCursor(HCURSOR) 代码如下所示: void mainWin::closeEvent( QCloseEvent* e ) { SetCursor
void mainWin::closeEvent( QCloseEvent* e ) {
SetCursor( LoadCursor( GetModuleHandle( NULL ), ( LPCWSTR )IDC_WAIT ) );
saveData();
SetCursor( LoadCursor( GetModuleHandle( NULL ), ( LPCWSTR )IDC_ARROW ) );
e->accept();
}
但是,第一个SetCursor()方法只是在保存数据时隐藏光标,而不是将其更改为某种沙漏。为什么?您应该使用
QApplication::setoverridecursors
,它将更改整个应用程序的光标
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
saveData();
QApplication::restoreOverrideCursor();
当然,您可以在创建光标时提供自己的pixmap。
您可以做的另一件有趣的事情是创建一个RAII类来处理自定义游标。在构造函数中调用
setOverrideCursor
,在析构函数中调用restoreOverrideCursor
。当您有许多地方需要更改光标并在作用域末尾自动恢复光标时,这样做非常方便。另一个优点是,如果您的saveData
方法抛出,您的光标将被重置,这非常好。我担心我必须向QApplication对象传递一些指针,但它甚至是静态的!谢谢顺便问一下,你知道为什么使用WinAPI会隐藏游标吗?当您包含QApplication时,只有一个好奇.QApplication指针始终可用。您可以通过qApp宏或QApplication::instance静态方法访问它。