本编文章主要展示用qt来实现进程,线程。

一.进程

如何在QT中启动一个新的进程?

方法一:1.窗体中设置pushButton,按钮转到槽

2.在头文件中添加进程类 : #include<QProcess>

3.槽函数中打开想要打开的进程,可以是windows中的进程,也可以说是自己编译的可执行程序。

例如:QProcess::execute("NotePad"); //打开记事

QProcess::execute("MSPAINT"); //打开画图

注意:若想打开自定义程序,需将对应的dll类添加Windowsc:/windows/system32中。

方法二:1.窗体中设置pushButton,按钮转到槽

2.在头文件中添加进程类 : #include<QProcess>

3.槽函数中先定义一个进程对象,设置要启动的进程,用start方法启动。

例如:static QProcess process;

process.setProgram("NotePad");

process.start();

注意:加上static,进程对象加载进程时,当进程对象销毁后,被加载的进程就会被杀死。

二.线程

QT中为什么要线程?

如果界面中某个成员函数进行比较耗时的操作时,界面可能出现卡顿的现象。这时就需要创建一个线程,让线程处理耗时的操作,当前进程返回正常值。(用线程类定义一个对象时,该对象就是一个线程)

QT工程中使用线程,需要以下要素:1.需要一个线程派生类对象

2.在线程子类中重写线程执行函数run();

3.启动线程 。对象.start();

注意:线程基类QThread无法直接声明对象,需要定义一个线程子类。

例题:在qt中创建一个线程循环打印 “hello”

步骤:1.在qt工程中添加新文件 C++ Header File 和 C++ Source File

2. C++ Header File 中:

#include<QThread>  //线程基类

class myThread : public QThread

{

Q_OBJECT //支持信号和槽的机制

public:

explicit  myThread(QObject *parent = 0);

//不需要析构函数,线程占用进程空间

signals :

void doDone(); //自定义信号函数,用于给进程发信号

protected :

void run(); //重写线程执行函数

3.C++ Source File 中

#include"mythread.h"

#include<QDebug>

myThread::myThread(Qobject *parent):QThread(parent);//初始化

void myThread::run()

{

int i;

for(i=0;i<10;i++)

{

QThread::sleep(1);

qDebug()<<"hello\r\n";

}

emit doDone(); //给进程发信号

}

4.界面添加button,转到槽

thread->start(); //启动线程

5.头文件中,声明线程指针,声明doDone信号对应的槽函数

private :

myThread * thread;

private slots:

void threadDoneSloat(); //用来回收线程资源

6.窗体构造函数中将doDone信号和自定义槽函数关联起来

thread = new myThread(this);

connect(thread, SIGNAL(doDone()),this,SLOT(threadDoneSlots));

7.定义.h中声明的槽函数

thread -> quit(); //退出线程

thread->wait();//回收线程退出状态值

总体思想:点下button时启动线程,线程结束时发送doDone信号主进程,将doDone信号和槽关联起来,当接受到信号时执行槽函数,槽函数进行回收资源。线程执行函数不需要自己调用,线程启动时由系统自行调用。

QT/C++高级编程(上)相关推荐

  1. 一、C++面向对象高级编程(上) (侯捷)

    侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...

  2. 【C++】侯捷C++面向对象高级编程(上)

    C++面向对象高级编程 前言 C++ Programs代码基本形式 文件类型 头文件写法 头文件布局 class1--complex 类的声明 inline--内联函数 class访问级别(acces ...

  3. unix环境高级编程(上)-文件篇

    目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将<unix环境高级编程>主要内容总结为三篇:文件篇,进程篇,高级 ...

  4. 侯捷C++学习记录-面向对象高级编程上

    目标: 培养正规的.大气的编程习惯 以良好的方式编写C++ class [Object Based(基于对象)] 学习Classes 之间的关系 [Object Oriented(面向对象)] 继承( ...

  5. 【C++】01-C++面向对象高级编程(上)-笔记(侯捷系列)

    1.在设计一个类的时候,数据应该尽量是private的,几乎没有例外. 2.构造函数应该用冒号后面初值列的形式,不应该在构造函数的函数体里面去赋值. 例如, A::A(int a) : m(a) {/ ...

  6. 一、C++面向对象高级编程(下) (侯捷)

    侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...

  7. Qt高级编程之多线程处理

    目录 前言 一.简介 1.1 并发执行机制 1.2 多线程机制 1.3 多线程处理的方式 二.Qt高级线程类实现多线程 2.1 在线程中执行函数 2.1.1 使用QtConcurrent::run() ...

  8. OC高级编程——深入block,如何捕获变量,如何存储在堆上

    OC高级编程--深入block,如何捕获变量,如何存储在堆上 首先先看几道block相关的题目 这是一篇比较长的  博文 ,前部分是block的测试题目,中间是block的语法.特性,block讲解b ...

  9. Python学习笔记:面向对象高级编程(上)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. Python enumerate() 函数的使用
  2. linux内核链表使用例,linux内核链表的使用例子
  3. 谈谈你对Android NDK的理解
  4. red hat 升级 php 5.6,Centos7下编译php5.6.19出错,怎么解决?
  5. python 语言教程(2)基础语法之标识符
  6. 混合云异军突起 英特尔的全“芯”体验为企业保驾护航
  7. 6.6 AdaBoost实战
  8. 科技部部长:院士头衔不是学术不端挡箭牌!已有多位院士、校长等被“拿下”...
  9. 大数据技术与应用解读及案例分析(PPT)
  10. 大漠插件注册使用方法教程
  11. 使用REG注册表文件添加、修改或删除注册表键值和子项介绍
  12. vue antvG6产品流程图
  13. 你说你懂计算机网络,那这些你都知道吗
  14. no jdk specified
  15. 对象数组中根据某个属性名的值相同,求某一项的和。
  16. 微商相册服务器维护,微商相册
  17. 服务器怎么导入皮肤文件,Malody皮肤导入的详细技巧
  18. 微信小程序 环形进度条_微信小程序实现圆形进度条动画
  19. 如果诸葛亮用C#写出师表...
  20. 高薪面试题之四.前端

热门文章

  1. Apache rewrite URL静态化配置与参数详解
  2. STC8H单片机I2C协议驱动OLED 的困惑
  3. 股票星期几买涨的概率大?
  4. c语言中signal函数详细解释说明
  5. Elasticsearch API接口介绍
  6. 外行人都能看懂的SpringCloud,错过了血亏! 1
  7. QUARTZ 简单介绍
  8. 安装ESIM事件相机模拟器遇到的一些问题及解决方法
  9. error: #20: identifier “uint16_t“ is undefined
  10. linux查找grep过滤错误信息,Linux 输出过滤器:grep 命令