Qt 长时间运行时“请稍候”?

YeP*_*YeP 1 qt progress wait

我需要在用户单击按钮后执行操作,这可能需要一些时间。如何显示“忙碌”或“请稍候”图标/消息(如旋转圆圈等)并防止用户在此期间再次单击该按钮(或其他一些按钮)?谢谢。

Pav*_*aka 5

使用 QApplication 对象的静态函数setOverrideCursor(const QCursor &cursor)

设置等待光标,使应用程序“忙”,如下所示。

QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
Run Code Online (Sandbox Code Playgroud)

当您觉得工作完成时,使用以下功能进行恢复

QApplication::restoreOverrideCursor();
Run Code Online (Sandbox Code Playgroud)

一些文档帮助:

http://doc.qt.io/qt-5/qguiapplication.html#setOverrideCursor

现在要禁用该窗口,请覆盖窗口类的事件过滤器函数。

声明一个全局变量,表示“忙”或“不忙”。前任:_isBusy

在事件过滤器中执行如下所示的操作。

eventfilter是 的虚函数QObject

因此,您可以在窗口类中进行重写,如下所示。

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
     if (_isBusy) //your global variable to check "busy or "notbusy"
     {
         //Just bypass key and mouse events
          switch(event->type())
          {
             case QEvent::MouseButtonPress:
             case QEvent::MouseButtonRelease:
             case QEvent::KeyPress:
             case QEvent::KeyRelease:
             return true;
          }
     }
}
Run Code Online (Sandbox Code Playgroud)

注意:上面函数声明中的“MainWindow”是您的类名。另外,在 switch 语句中,我将计数限制为仅 4 个事件,您可以添加任意数量的事件。