【问题标题】:Changing cursor hides the cursor更改光标隐藏光标
【发布时间】:2012-09-11 09:41:32
【问题描述】:

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

【问题讨论】:

    标签: c++ qt winapi


    【解决方案1】:

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

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

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

    【讨论】:

    • 我担心我必须将一些指针传递给 QApplication 对象,但它甚至是静态的!谢谢。顺便问一下,你知道为什么使用 WinAPI 会隐藏光标吗?只是好奇。
    • 包含 QApplication 时,QApplication 指针始终可用。您可以通过 qApp 宏或 QApplication::instance 静态方法访问它。
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 2011-12-23
    • 2011-10-06
    • 2011-04-11
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多