QT关于让ui界面停止刷新,ui线程进入等待或者延时
2018-03-27 10:21
477 查看
像这种让主界面主线程进入等待的情况一般很少用到,但是在嵌入式平台中还是会用到的,在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++;
}
}
相关文章推荐
- 关于子线程刷新ui
- Android -- ViewRoot,关于子线程刷新UI
- Qt线程QThread简析(8个线程等级,在UI线程里可调用thread->wait()等待线程结束,exit()可直接退出线程,setStackSize设置线程堆栈,首次见到Qt::HANDLE,QThreadData和QThreadPrivate)
- 关于窗口Qt线程停止的问题
- qt- thread —— 关于槽函数所在线程的问题
- Android使用Sensor感应器实现线程中刷新UI创建android测力计的功能
- qt 线程与ui线程同步
- 妹子UI轮播插件中关于用户停止操作重新轮播失效的解决办法
- 关于子线程更新UI
- 关于解决jquery用get实现ajax在ie里面刷新不进入后台的问题
- 关于Java中停止线程执行的方法总结
- 由UI刷新谈到线程安全和Android单线程模型
- java高级多线程编程--关于线程的停止问题
- 关于Child风格的CDialog上CListCtrl, 在CDialog最小化或者有窗口遮挡后CListCtrl无法刷新的问题
- Android学习笔记-转载两篇关于线程更新UI的方法的文章
- 线程中刷新UI
- 【Based Android】Android Sensor感应器介绍(二)线程中刷新UI 创建一个android测力计
- qt 线程与ui线程同步
- QT-关于qtcreator.exe已停止运行错误处理
- 关于THREAD线程中CurrentCulture与CurrentUICulture的学习