QT/C++高级编程(上)
本编文章主要展示用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++高级编程(上)相关推荐
- 一、C++面向对象高级编程(上) (侯捷)
侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...
- 【C++】侯捷C++面向对象高级编程(上)
C++面向对象高级编程 前言 C++ Programs代码基本形式 文件类型 头文件写法 头文件布局 class1--complex 类的声明 inline--内联函数 class访问级别(acces ...
- unix环境高级编程(上)-文件篇
目录 前言 unix基础知识 unix标准化和实现 unix提供的文件IO 文件和目录 标准IO 系统数据文件 前言 笔者将<unix环境高级编程>主要内容总结为三篇:文件篇,进程篇,高级 ...
- 侯捷C++学习记录-面向对象高级编程上
目标: 培养正规的.大气的编程习惯 以良好的方式编写C++ class [Object Based(基于对象)] 学习Classes 之间的关系 [Object Oriented(面向对象)] 继承( ...
- 【C++】01-C++面向对象高级编程(上)-笔记(侯捷系列)
1.在设计一个类的时候,数据应该尽量是private的,几乎没有例外. 2.构造函数应该用冒号后面初值列的形式,不应该在构造函数的函数体里面去赋值. 例如, A::A(int a) : m(a) {/ ...
- 一、C++面向对象高级编程(下) (侯捷)
侯捷 C++八部曲笔记汇总 - - - 持续更新 ! ! ! 一.C++ 面向对象高级开发 1.C++面向对象高级编程(上) 2.C++面向对象高级编程(下) 二.STL 标准库和泛型编程 1.分配器 ...
- Qt高级编程之多线程处理
目录 前言 一.简介 1.1 并发执行机制 1.2 多线程机制 1.3 多线程处理的方式 二.Qt高级线程类实现多线程 2.1 在线程中执行函数 2.1.1 使用QtConcurrent::run() ...
- OC高级编程——深入block,如何捕获变量,如何存储在堆上
OC高级编程--深入block,如何捕获变量,如何存储在堆上 首先先看几道block相关的题目 这是一篇比较长的 博文 ,前部分是block的测试题目,中间是block的语法.特性,block讲解b ...
- Python学习笔记:面向对象高级编程(上)
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
最新文章
- 法嵌入互操作类型“SHDocVw.ShellWindowsClass”请改用适用的接口-解决方法
- WD强势出击 推出全球业界首款2TB硬盘
- 【三分钟讲清区块链/比特币】之一:区块链入门教程
- 分区式存储管理c++_分区机要变形缝,纵横交接卫浴厨:防火阀参数的高效记忆口诀...
- java heap_javaHeap的组成及GC监控
- Android doc |Getting Started|部分 部分译文 --Building Your First App
- nodejs实践录:我的nodejs编码风格
- 网页校验器:含有Flash的网页如何通过校验 ?
- 四 akka学习 四种多线程的解决方案
- VM安装CentOS6-相关NAT上网VM-tools安装
- NJ68 键盘说明书
- 黑帽SEO常用作弊手法分析
- 多条件模糊分页查询(angular+primeng+springboot)
- 【vss清理or销毁已删除文件】SourceSafe如何销毁已经删除的文件
- android系统定制添加分辨率,density设置
- Comet OJ - Contest #5 D 迫真小游戏 (堆+set)
- RabbitMQ 安装教程(CentOS版)
- 计算机编辑字块教学ppt,文字处理与编辑排版.ppt
- NginxProxyManager实现unraid反向代理
- UI设计教程分享:PS故障风海报制作教程