当前位置: 代码迷 >> QT开发 >> 绘图之后等待一段时间再同个区域重新绘图?解决方案
  详细解决方案

绘图之后等待一段时间再同个区域重新绘图?解决方案

热度:118   发布时间:2016-04-25 05:02:50.0
绘图之后等待一段时间再同个区域重新绘图?
初学者请教@@
我希望在打开图片后对图片进行三种不同处理,然后先绘出第一幅图,等待5秒,再在同一个区域绘出第二幅图,等待5秒,再第三幅图,等待5秒,再重新第一幅,循环。。。

相关部分代码如下:
BMP b; //BMP是已定义的class
void Dialog::OpenPic(){
  QString fileName = QFileDialog::getOpenFileName(this);
  if(!fileName.isEmpty()){
  setWindowTitle(fileName);
  b.ReadBmp(fileName); //读入图片并进行三种处理
  while(1){
  image = b.ShowImage1(fileName); //取出第一幅图,image是Dialog类中private的对象
  QWidget::update();
  Sleep(5000);
  image = b.ShowImage2(fileName); //取出第二幅图
  QWidget::update();
  Sleep(5000);
  image = b.ShowImage3(fileName); //取出第三幅图
  QWidget::update();
  Sleep(5000);
  }
  }
}

void Dialog::paintEvent(QPaintEvent *){
  QPainter painter(this);
  painter.drawImage(20, 20, image, 0, 0);
}


我把while循环注释掉之后运行,只会在等待一段时间后直接显示第三幅图,any idea?

------解决方案--------------------
你该使用定时器去触发
------解决方案--------------------
用定时器, 或者开线程。
在单线程的话 还要调用 QCoreApplication::processEvents()
------解决方案--------------------
QWidget::update();
会调用基类的update……

把while循环改成timer,每5秒换一次image, 然后 update()即可。
------解决方案--------------------
你while死循环在哪里当然处理不了其他点击事件了。

所以建议你用QTimer, click的时候stop之。
------解决方案--------------------
我写的类似的例子:http://www.qtcn.org/bbs/read-htm-tid-47228-displayMode-1-page-1.html#120556
  相关解决方案