本编文章主要展示用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. 法嵌入互操作类型“SHDocVw.ShellWindowsClass”请改用适用的接口-解决方法
  2. WD强势出击 推出全球业界首款2TB硬盘
  3. 【三分钟讲清区块链/比特币】之一:区块链入门教程
  4. 分区式存储管理c++_分区机要变形缝,纵横交接卫浴厨:防火阀参数的高效记忆口诀...
  5. java heap_javaHeap的组成及GC监控
  6. Android doc |Getting Started|部分 部分译文 --Building Your First App
  7. nodejs实践录:我的nodejs编码风格
  8. 网页校验器:含有Flash的网页如何通过校验 ?
  9. 四 akka学习 四种多线程的解决方案
  10. VM安装CentOS6-相关NAT上网VM-tools安装
  11. NJ68 键盘说明书
  12. 黑帽SEO常用作弊手法分析
  13. 多条件模糊分页查询(angular+primeng+springboot)
  14. 【vss清理or销毁已删除文件】SourceSafe如何销毁已经删除的文件
  15. android系统定制添加分辨率,density设置
  16. Comet OJ - Contest #5 D 迫真小游戏 (堆+set)
  17. RabbitMQ 安装教程(CentOS版)
  18. 计算机编辑字块教学ppt,文字处理与编辑排版.ppt
  19. NginxProxyManager实现unraid反向代理
  20. UI设计教程分享:PS故障风海报制作教程

热门文章

  1. 有道云笔记 - Markdown模板(文首附markdown源码,即.md文件)
  2. Java EE架构师认证
  3. 大数据分析必学的六个核心技术点
  4. 什么是大数据(Big Data)?
  5. 58同城iOS客户端Hybrid框架探索
  6. rm -rf命令的作用 以及windows 代替命令
  7. SpringBoot的学习资源 尚硅谷 蚂蚁学院
  8. 2022全网最全Java面试题-小米社招面试经验java,面试题整理(一面二面)
  9. vtd和vt的区别_vi和vt的区别小窍门
  10. WiFi出现间歇性断网时,应该如何解决!