"please wait" 在 Qt 中长时间运行?
"please wait" during long operation in Qt?
我需要在用户点击按钮后进行操作,这可能需要一些时间。如何显示 "busy" 或 "please wait" icon/message(如旋转的圆圈等)并防止用户在此期间再次单击按钮(或其他按钮)?谢谢
使用您的 QApplication 对象的静态函数 setOverrideCursor(const QCursor &cursor)
设置等待光标,使应用"busy",如下图
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
当你觉得工作完成时,使用下面的函数恢复
QApplication::restoreOverrideCursor();
一些文档帮助:
http://doc.qt.io/qt-5/qguiapplication.html#setOverrideCursor
现在要禁用 window,覆盖 window class 的事件过滤器功能。
声明一个全局变量,表示 "busy" 或 "notbusy"。例如:_isBusy
.
在事件过滤器中执行如下所示的操作。
eventfilter
是QObject
的虚函数。
因此您可以在 window class 中覆盖,如下所示。
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"是你的class名字。同样在 switch 语句中,我将计数限制为仅 4 个事件,添加任意数量的事件。
我需要在用户点击按钮后进行操作,这可能需要一些时间。如何显示 "busy" 或 "please wait" icon/message(如旋转的圆圈等)并防止用户在此期间再次单击按钮(或其他按钮)?谢谢
使用您的 QApplication 对象的静态函数 setOverrideCursor(const QCursor &cursor)
设置等待光标,使应用"busy",如下图
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
当你觉得工作完成时,使用下面的函数恢复
QApplication::restoreOverrideCursor();
一些文档帮助:
http://doc.qt.io/qt-5/qguiapplication.html#setOverrideCursor
现在要禁用 window,覆盖 window class 的事件过滤器功能。
声明一个全局变量,表示 "busy" 或 "notbusy"。例如:_isBusy
.
在事件过滤器中执行如下所示的操作。
eventfilter
是QObject
的虚函数。
因此您可以在 window class 中覆盖,如下所示。
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"是你的class名字。同样在 switch 语句中,我将计数限制为仅 4 个事件,添加任意数量的事件。