美文网首页Qt 使用笔记
Qt 多线程的简单使用

Qt 多线程的简单使用

作者: paresly | 来源:发表于2019-05-26 16:13 被阅读0次

背景
使用Qt开发界面程序的时候,免不了做一些数据计算,有时候,当计算量比较大,需要耗费一定的时间。一直在界面上等待肯定不是一个好的办法。这里介绍一种多线程的处理方法。

方法

  • 在界面相关的类中定义一个 QThread 指针成员变量m_oper,m_oper构造时,不要指定parent,不然m_oper就和parent处于同一个线程下了。
  • 将需要处理的计算用枚举或是其他类型进行区分,这样可以根据名称处理多个不同的计算,计算时,先为m_oper传递需要的参数,然后执行m_oper->start();进行计算。
  • 当m_oper计算完成之后,可通过信号通知界面类,并提供接口去为界面类提供计算结果数据。
  • 界面类的槽函数在获取当处理结果时,把结果显示在界面上。这样在计算的过程中,界面就不会出现卡顿的现象。

代码示例

class FileOper : public QThread
{

signals:
          void processFinished();
 public:
        enum Class OperType : int
        {
                  PROCESS_INDEX = 0,
                  //  other enums
        }
    
       void setParams(const QString& msg)
       {
               // send param to the thread
       }

       void start()
      {
            switch(m_type)
            {
                  case PROCESS_INDEX :
                   process();  //处理界面数据的函数     
                   emit processFinished();
                   break;
            }
      }
}


class widget : public QWidget
{
      ...
      explicit widget(QWidget* parent = nullptr)
      {
               m_oper = new FileOper();
               connect(m_oper,&FileOper::processFinished,
                              this,&widget::onProcessFinished);
      }
        void  setParam(const QString& msg);//the thread params for calc
private slots:
        void onBtnClicked()
        {
                 m_oper->setOperType(FileOper::OperType::PROCESS_INDEX);
                 m_oper->setParam("the param to be calc");
                 m_oper->start();
        }
        void onProcessFinished()
        {
                QString result = m_oper->result();
                //TODO:ui opers
        }

private:
        FileOper* m_oper;
};

相关文章

  • Qt 多线程的简单使用

    背景使用Qt开发界面程序的时候,免不了做一些数据计算,有时候,当计算量比较大,需要耗费一定的时间。一直在界面上等待...

  • Qt的线程与异步

    Qt线程 使用Qt开发多线程应用,这里有一篇必看的官网博客:You are doing it wrong,文章讲了...

  • Qt多线程编程爬坑笔记

    最近在工作中用到了Qt中的多线程,踩了不少坑,故作下笔记,警示后人 - -! Overview 使用多线程编程可以...

  • QT多线程学习(三)

    上两篇篇举例使用了QT的多线程使用方式一和二下面举例使用线程池实现多线程,参考链接可看上一篇同样的,程序需要实现如...

  • 多线程:iOS中的多线程实现方案

    一、iOS的多线程方案二、NSThread的简单使用三、NSOperation的简单使用 一、iOS的多线程方案 ...

  • Qt多线程的正确用法

    Qt多线程的正确用法 - CSDN博客

  • 2018-07-08

    ## 注意 - 注意使用单独安装的MinGW6.3,QT的MinGW,缺少多线程dll - 取消cmake中的En...

  • Qt 多线程的简单应用

    原文:https://blog.csdn.net/uyy203/article/details/52704059 ...

  • 多进程和多线程的应用场景

    其实,使用多线程编程还是使用多进程编程,有一个简单的原则,如果能使用多线程实现的,就用多线程,不能使用多线程实现的...

  • QT串口编程 - 终端示例(Terminal)

    QT串口编程 - 终端示例(Terminal) 终端显示了如何使用Qt串行端口为简单的串行接口创建终端。 此示例显...

网友评论

    本文标题:Qt 多线程的简单使用

    本文链接:https://www.haomeiwen.com/subject/mefftctx.html