Qt在长时间运行期间“请稍等”?

时间:2017-07-20 19:15:11

标签: qt wait progress

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

QApplication::restoreOverrideCursor();

一些文档帮助:

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

现在要禁用窗口,请覆盖窗口类的事件过滤器功能。

声明一个全局变量,表示"忙"或" notbusy"。例如:_isBusy

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

eventfilterQObject的虚函数。

所以你可以在窗口类中覆盖,如下所示。

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;
          }
     }
}

注意:" MainWindow"在上面的函数声明中是你的类名。同样在switch语句中,我将计数限制为仅4个事件,添加您想要的任意数量的事件。