IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> QT/C++高级编程(上) -> 正文阅读

[C++知识库]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信号和槽关联起来,当接受到信号时执行槽函数,槽函数进行回收资源。线程执行函数不需要自己调用,线程启动时由系统自行调用。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:09:10  更:2021-08-05 17:09:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 19:45:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码