QT 作业 C++ day5

作业

代码

MyQThread.h

class MyThread : public QThread
{Q_OBJECT
public:MyThread(QObject *parent = nullptr);
protected:void run() override;
signals://向ui界面发送的 "复制进度" 的信号void copy_process_signal(int index);    
public slots:// "复制"信号的槽void do_copyfile_slots(QString oldfilename,QString newfilename);
private:QString oldfilename;QString newfilename;bool start_copy_flag=0;
};#endif // MYTHREAD_H

MyQThread.cpp

MyThread::MyThread(QObject *parent):QThread(parent)
{}// "槽"
void MyThread::do_copyfile_slots(QString oldfilename,QString newfilename)
{//进入此函数,说明ui界面拖入了文件,需要进行文件复制this->oldfilename=oldfilename;  //源文件路径this->newfilename=newfilename;  //目标文件路径start_copy_flag=1;  //打开标志位
}void MyThread::run()
{qDebug() << "子进程进入run函数";while(1){if(start_copy_flag){;//文件复制(准备阶段)QFile old_file(oldfilename);      //拆功能键QFile对象QFile new_file(newfilename);old_file.open(QIODevice::ReadOnly);    //打开文件new_file.open(QIODevice::WriteOnly);char data[4096];qint64 filesize = old_file.size();     //文件总大小qint64 readsize=0;                     //已读大小int index_backup=0;                    //任务进度//文件复制(执行阶段)while(1){//读取数据qint64 real_read__size = old_file.read(data,4096);//判断是否读完if(real_read__size == 0){break;}        //读取到的字节数为0 说明读取完毕,退出//计算"处理进度"readsize+=real_read__size;              //已经读取的字节总数int index =readsize * 100 / filesize;   //"处理进度"//告知ui界面 当前“处理进度”if(index - index_backup > 1)    //仅当"处理进度"发生变化x时{copy_process_signal(index); //才发出信号,让ui重新回执进度qDebug() << "复制进度" << index << " 读取总字节" << readsize << " 文件总大小" << filesize;}//写入数据new_file.write(data,real_read__size);}copy_process_signal(100);         //运行到此说明复制完毕,手动将进度设置为100old_file.close();new_file.close();qDebug() << "复制完毕";start_copy_flag = 0;    //关闭标志位}}exec(); // 启动事件循环
}

Widget.h

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECT
public:Widget(QWidget *parent = nullptr);~Widget();void dropEvent(QDropEvent *event) override;             //释放void dragEnterEvent(QDragEnterEvent *event) override;   //进入
private slots:void update_copy_process(int index);
signals:void copyfile_signal(QString oldfilename,QString newfilename);
private:Ui::Widget *ui;
};
#endif // WIDGET_H

Widget.cpp

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setAcceptDrops(1);    //设置允许拖拽MyThread* thread = new MyThread(this);// "复制文件"QObject::connect(this,&Widget::copyfile_signal,thread,&MyThread::do_copyfile_slots);// "任务进度"QObject::connect(thread,&MyThread::copy_process_signal,this,&Widget::update_copy_process);//滑块相关设置QString qss = "QSlider::sub-page{background-color:blue} QSlider::groove:horizontal{background-color:white}";ui->slider->setStyleSheet(qss);thread->start();
}Widget::~Widget()
{delete ui;
}//拖入
void Widget::dragEnterEvent(QDragEnterEvent *event)
{event->acceptProposedAction();  //接收拖入
}//释放
void Widget::dropEvent(QDropEvent *event)
{//从事件中解析文件名const QMimeData* mData = event->mimeData();      //获取其中mimeDataQList<QUrl> urls_list = mData->urls();           //转为urls_list 文件信息村饭到这个容器中QUrl url = urls_list[0];                         //读取容器中第一条数据QString oldfilename = url.toLocalFile();         //url 转 "文件名"//从对话框中获取文件名QString newfilename = QFileDialog::getSaveFileName(this,"保存文件","E:\\DAY5","AllFiles (*);;Images (*.png *.xpm *.jpg)");//数据部分,交由进程处理copyfile_signal(oldfilename,newfilename);
}//槽函数(子进程任务进度 信号)
void Widget::update_copy_process(int index)
{//设置进度条ui->slider->setValue(index);
}

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29617.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BOOK推荐-学海无涯

一、战略思维与商业洞察 《好战略,坏战略》(理查德鲁梅尔特) 重点:破除模糊口号,聚焦“诊断问题-制定方针-连贯行动”的战略核心逻辑。 《竞争战略》(迈克尔波特) 重点:五力模型、三大通用战略,掌握行业分析的底层框架。 《蓝海战略》(W.钱金 / 勒妮莫博涅) 重点:跳…

软件工程笔记下

从程序到软件☆ 章节 知识点 概论☆ 软件的定义&#xff0c;特点&#xff0c;生存周期。软件工程的概论。软件危机。 1.☆软件&#xff1a;软件程序数据文档 &#xff08;1&#xff09;软件&#xff1a;是指在计算机系统的支持下&#xff0c;能够完成特定功能与性能的包括…

python-leetcode-解决智力问题

2140. 解决智力问题 - 力扣&#xff08;LeetCode&#xff09; 这道题是一个典型的 动态规划&#xff08;Dynamic Programming, DP&#xff09; 问题&#xff0c;可以使用 自底向上 的方式解决。 思路 定义状态&#xff1a; 设 dp[i] 表示从第 i 题开始&#xff0c;能获得的最高…

Spring Boot集成Minio笔记

一、首先配置MinIO 1、MinIO新建Bucket&#xff0c;访问控制台如图 创建访问密钥(就是账号和密码) 二、集成mino添加Minio客户端依赖 1.maven构建方式在pom.xml引入jar <dependency><groupId>io.minio</groupId><artifactId>minio</artifactI…

TypeError: Cannot set properties of undefined (setting ‘xxx‘)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

第三次CCF-CSP认证(含C++源码)

第三次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码solution 1&#xff08;模拟&#xff09;solution 2 (哈希表) 第二道&#xff08;easy but mid for me&#xff09;思路及AC代码solution 1遇到的问题 solution 2 第三题&#xff08;mid&#xff09;基本思路…

常见排序算法鉴赏(原理剖析+动图演示)

目录 一、冒泡排序&#xff08;BubbleSort&#xff09; 二、选择排序&#xff08; SelectSort&#xff09; 三、插入排序&#xff08;InsertSort&#xff09; 四、希尔排序&#xff08;ShellSort&#xff09; 五、堆排序 六、快排&#xff08;QuickSort&#xff09; Hoa…

鸿蒙跨平台框架ArkUI-X

01 引言 目前&#xff0c;移动端主流跨平台方案有Flutter、React Native、uni-app等等&#xff0c;还有刚推出不久的Compose-Multiplatform&#xff0c;真所谓是百花齐放。这些框架各有特点&#xff0c;技术实现各有差异&#xff0c;比如Flutter通过Dart编写的UI描述对接Flutte…

【科一】综合素质

职业理念&职业道德 &#xff08;职业理念中的教育观&#xff09; 提速个性创两全 素质教育是 以提高国民素质为根本宗旨促进学生个性发展以培养学生的创新精神和实践能力为重点面向全体学生促进学生全面发展 学习过人 教育者为中心 转向学习者为中心教会学生知识 转向 教会…

一招解决Pytorch GPU版本安装慢的问题

Pytorch是一个流行的深度学习框架&#xff0c;广泛应用于计算机视觉、自然语言处理等领域。安装Pytorch GPU版本可以充分利用GPU的并行计算能力&#xff0c;加速模型的训练和推理过程。接下来&#xff0c;我们将详细介绍如何在Windows操作系统上安装Pytorch GPU版本。 查看是否…

静态时序分析:SDC约束命令set_ideal_network详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 set_ideal_network命令可以将当前设计中的一组端口或引脚标记为理想网络源&#xff08;或者说设置端口或引脚的ideal_network_source属性为true&#xff09;&…

优先队列priority_queue应用

不讲概念&#xff01;&#xff01;只说用法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 优先队列 priority_queue 换种话来说就是堆&#xff0c;只可以从中取到最大或者最小的值&#xff0c;所以说&#xff0c;只维护堆顶。它使用less&#xff08;&#xff…

鸿蒙Android4个脚有脚线

效果 min:number122max:number150Row(){Stack(){// 底Text().border({width:2,color:$r(app.color.yellow)}).height(this.max).aspectRatio(1)// 长Text().backgroundColor($r(app.color.white)).height(this.max).width(this.min)// 宽Text().backgroundColor($r(app.color.w…

2025年总结zabbix手动部署过程!

1.下载软件包。 wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_6.0ubuntu22.04_all.deb dpkg -i zabbix-release_latest_6.0ubuntu22.04_all.deb apt update apt install zabbix-server-mysql zabbix-frontend-php zabbix…

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…

TypeError: Cannot read properties of undefined (reading ‘xxx‘)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

Spring 无法解决循环依赖的 5 种场景

一、构造器注入引发的循环依赖 1. 问题复现 Component public class ServiceA {private final ServiceB serviceB;Autowiredpublic ServiceA(ServiceB serviceB) { // 构造器注入this.serviceB serviceB;} }Component public class ServiceB {private final ServiceA servic…

Vue项目通过内嵌iframe访问另一个vue页面,获取token适配后端鉴权(以内嵌若依项目举例)

1. 改造子Vue项目进行适配(ruoyi举例) (1) 在路由文件添加需要被外链的vue页面配置 // 若依项目的话是 router/index.js文件 {path: /contrast,component: () > import(/views/contrast/index),hidden: true },(2) 开放白名单 // 若依项目的话是 permission.js 文件 cons…

案例1_2:点亮8个灯【改进版】

文章目录 文章介绍改进的原理图改进的代码效果图 文章介绍 改进的原理图 使用标号简化连线 改进的代码 #include <reg51.h> // 包含头文件void main() {// 让 LED1-LED4 低电平&#xff08;点亮&#xff09;// P0 1111 0000;P0 0xF0;while (1); // 让程序一直运行…

Bazel搭建CUDA工程入门

环境版本&#xff1a; 工程目录&#xff1a; 测试输出&#xff1a; WORKSPACE 参考仓库&#xff1a;CUDA rules for Bazel 及 examples load("bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")http_archive(name "rules_cuda…