QT关于让ui界面停止刷新,ui线程进入等待或者延时

像这种让主界面主线程进入等待的情况一般很少用到,但是在嵌入式平台中还是会用到的,在windows平台中这种等待事件,直接就开一个线程去处理了,

但是在嵌入式系统中就不一定会那么方便了。

比如我们在嵌入式系统中打印测量数据,要等待打印完成才能进行下一步操作,这时我们就要将界面锁定。等待打印完成在解锁。

方式如下:

我们需要建立一个全局变量来表示锁定和解锁状态

    bool mUserInputLock;//设定为全局

我们初始为

    mUserInputLock = false;

我们还需要在锁定状态下将事件过滤掉:

bool MainWindow::eventFilter(QObject *obj,  QEvent *event)
{
        if((event->type()==QEvent::TouchBegin) || (event->type()==QEvent::KeyPress) || (event->type()==QEvent::MouseButtonPress)|| (event->type()==QEvent::MouseButtonRelease)|| (event->type()==QEvent::MouseButtonDblClick)) {
    if (sysInfo.mUserInputLock) {
        qDebug() << "sysInfo.mUserInputLock";
        return true;
    }
        }
 
return QObject::eventFilter(obj, event);


}

这里有点击事件,鼠标事件等。根据自己做处理。否则程序因为是单线程阻塞而崩溃。

接着,我们在进入打印时锁定屏幕

        MainWindow::sysInfo.mUserInputLock = true;

打印完成后解锁:

    if (MainWindow::sysInfo.mUserInputLock)
    {
        jobProgressBar->hide();
        delete jobProgressBar;
        qDebug() << "sysInfo.mUserInputLock";
        MainWindow::sysInfo.mUserInputLock = false;
    }

这里要注意,为了避免程序永远打印退出不了,我们设定一个定时器,在多久后强制解锁,否则程序就永远死在这里了。

void MainMeasure::acceptPrintWorkTimer()
{
    if(recordPrintWorkTimerNum == 100)
    {
        if (MainWindow::sysInfo.mUserInputLock)
        {
            jobProgressBar->hide();
            delete jobProgressBar;
            qDebug() << "sysInfo.mUserInputLock";
            MainWindow::sysInfo.mUserInputLock = false;
        }
    }else{
        recordPrintWorkTimerNum++;
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vqt5_qt6

你的鼓励是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值