当前位置:   article > 正文

Qt之QAxObject用法_qt qaxobject

qt qaxobject

    QtConcurrent 是一个构建在QThreadPool之上的上层API,它用于处理最普通的并行计算模式:map, reduce, and filter。同时,QtConcurrent::run()方法提供了一种便于在另一个线程运行一个函数的方法。

    不像QThread 以及QRunnable,QtConcurrent 没有要求我们使用底层的同步原语,QtConcurrent 所有的方法会返回一个QFuture 对象,它包含了结果而且可以用来查询线程计算的状态(它的进度),从而暂停、继续、取消计算。QFutureWatcher 可以用来监听一个QFuture 进度,并且通过信号和槽与之交互(注意QFuture是一个基于数值的类,它并没有继承自QObject).

比如以下示例:

  1. class MyWnd : public QWidget
  2. {
  3. Q_OBJECT
  4. private:
  5. static void execMyThr(void *pContext,string fileName,QString saveName);
  6. void execMy(string fileName,QString saveName);
  7. public slots:
  8. void onClickedMy();
  9. void MyFinished(QString filePath);
  10. private:
  11. bool bFinished;
  12. signals:
  13. void finished(QString);
  14. };
  1. <span style="color:#363534;">#include <fstream>
  2. #include <QFileInfo>
  3. MyWnd::MyWnd(QWidget *parent)
  4. : QWidget(parent),bFinished(true)
  5. {
  6. connect(this,SIGNAL(finished(QString)),this,SLOT(MyFinished(QString)));
  7. }
  8. void MyWnd::onClickedMy()
  9. {
  10. if(!bFinished)
  11. {
  12. QMessageBox::warning(this,tr("提示"),tr("上一次执行还未完成, 请稍候..."));
  13. return;
  14. }
  15. string filehs;
  16. QFileInfo file(QString::fromStdString(filehs));
  17. if(file.exists())
  18. { ///......
  19. QtConcurrent::run(execExportThr,this,filehs,fileName);
  20. }
  21. }
  22. void MyWnd::execMy(string filehs,QString saveName)
  23. { </span><span style="color:#ff0000;">///不能在这个函数中调用QtGUI界面</span><span style="color:#363534;">
  24. bFinished = false;
  25. ifstream fread;
  26. fread.open(filehs.c_str(), ios::in | ios::binary);
  27. if(fread.good())
  28. {
  29. ExcelEngine excel;
  30. if(excel.IsInstalledExcel())
  31. {
  32. while(fread.read((char*)&log, sizeof(LogInfo)))
  33. {
  34. }
  35. excel.Close();
  36. }
  37. fread.close();
  38. }
  39. emit finished(saveName);
  40. }
  41. void MyWnd::execMyThr( void *pContext,string fileName,QString saveName)
  42. {
  43. MyWnd *pThis = (MyWnd*)pContext;
  44. pThis->execMy(fileName,saveName);
  45. }
  46. void MyWnd::MyFinished(QString saveName)
  47. {
  48. QMessageBox::about(this,"成功",QString("执行完毕!"));
  49. bFinished = true;
  50. }
  51. </span>



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/170587
推荐阅读
相关标签
  

闽ICP备14008679号