Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更改光标将隐藏光标_C++_Qt_Winapi - Fatal编程技术网

C++ 更改光标将隐藏光标

C++ 更改光标将隐藏光标,c++,qt,winapi,C++,Qt,Winapi,在我的Qt应用程序中,我在关闭应用程序时保存一些数据。在closeEvent(QCloseEvent*)方法中执行数据保存。我想在保存数据之前更改光标,并在保存后恢复 从我在互联网上读到的内容来看,setCursor(constqcursor&)不是全局工作的,而是只在某些特定小部件的范围内工作。因此,我尝试使用WinAPI中的SetCursor(HCURSOR) 代码如下所示: void mainWin::closeEvent( QCloseEvent* e ) { SetCursor

在我的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::setoverridecursors
,它将更改整个应用程序的光标

QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
saveData();
QApplication::restoreOverrideCursor();
当然,您可以在创建光标时提供自己的pixmap。
您可以做的另一件有趣的事情是创建一个RAII类来处理自定义游标。在构造函数中调用
setOverrideCursor
,在析构函数中调用
restoreOverrideCursor
。当您有许多地方需要更改光标并在作用域末尾自动恢复光标时,这样做非常方便。另一个优点是,如果您的
saveData
方法抛出,您的光标将被重置,这非常好。

我担心我必须向QApplication对象传递一些指针,但它甚至是静态的!谢谢顺便问一下,你知道为什么使用WinAPI会隐藏游标吗?当您包含QApplication时,只有一个好奇.QApplication指针始终可用。您可以通过qApp宏或QApplication::instance静态方法访问它。