Qt - 将光标更改为沙漏并禁用光标

fuc*_*116 7 qt cursor

目前我正在研究Qt计划.为了防止用户在长任务运行时与应用程序交互,我尝试通过调用来覆盖游标

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

但是,不会禁用鼠标单击事件.

有没有办法在不禁用GUI的所有小部件的情况下禁用鼠标点击事件?

vri*_*nce 8

我花了很多时间找到一种方法来实际阻止Qt中的用户交互,并且事件过滤似乎是一种可接受的解决方案.

这是一个例子:

class AppFilter : public QObject
{
protected:
    bool eventFilter( QObject *obj, QEvent *event );
};

bool AppFilter::eventFilter(QObject *obj, QEvent *event)
{
    switch ( event->type())
    {
    //list event you want to prevent here ...
    case QEvent::KeyPress:
    case QEvent::KeyRelease:
    case QEvent::MouseButtonRelease:
    case QEvent::MouseButtonPress:
    case QEvent::MouseButtonDblClick:
    //...
    return true;
    }
    return QObject::eventFilter( obj, event );
}
Run Code Online (Sandbox Code Playgroud)

然后当你锁定什么时:

qapp->setOverrideCursor(Qt::WaitCursor);
qapp->installEventFilter(filter);
Run Code Online (Sandbox Code Playgroud)

解锁:

while( qapp->overrideCursor()) //be careful application may have been lock several times ...
    qapp->restoreOverrideCursor();
qapp->removeEventFilter(filter);
Run Code Online (Sandbox Code Playgroud)