当前位置: 首页 > news >正文

使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输

第一题、使用qss,通过线程,使进度条自己动起来

mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QObject>
#include <QThread>
#include <QDebug>class mythread : public QThread
{Q_OBJECT
public:mythread(QObject* parent=nullptr);
private:QThread* thread;int i;
protected:void run() override;signals:void send(int i);
};#endif // MYTHREAD_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <mythread.h>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();protected slots:void rcv(int i);private:Ui::Widget *ui;mythread* thread;
};
#endif // WIDGET_H

mythread.cpp

#include "mythread.h"mythread::mythread(QObject *parent):i(0)
{
}void mythread::run()
{while(1){emit send(i);i++;//qDebug()<<"hhh";if(i>=99){i=0;}this->usleep(1000);}
}

 widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QString qss = R"(QSlider::groove:horizontal {background-color: #f0f0f0;  /* 滑轨的背景色为灰白色 */height: 10px;  /* 滑轨的高度增大 */border-radius: 5px;  /* 滑轨的圆角 */}QSlider::sub-page:horizontal {background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #6a11cb, stop:1 #2575fc);  /* 滑块左侧的渐变背景色 */height: 10px;  /* 滑块左侧的高度增大 */border-radius: 5px;  /* 滑块左侧的圆角 */}QSlider::handle:horizontal {background-color: #ffffff;  /* 滑块手柄的背景色 */width: 24px;  /* 滑块手柄的宽度增大 */height: 24px;  /* 滑块手柄的高度增大 */margin: -7px 0;  /* 滑块手柄的垂直居中调整 */border-radius: 12px;  /* 滑块手柄的圆角增大 */border: 2px solid #cccccc;  /* 滑块手柄的边框 */})";ui->horizontalSlider->setStyleSheet(qss);thread=new mythread(this);thread->start();QObject::connect(thread,&mythread::send,this,&Widget::rcv);
}Widget::~Widget()
{delete ui;
}void Widget::rcv(int i)
{ui->horizontalSlider->setValue(i);
}

运行截图;

 

第二题;实现大文件的拷贝

mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QObject>
#include <QThread>
#include <QDebug>
#include <QFile>
#include <QMouseEvent>
#include <QFileDialog>
#include <QDropEvent>class mythread : public QThread
{Q_OBJECT
public:mythread(QObject* parent=nullptr);void run() override;void fileio();public slots:void rcv(QString filename);private:QString filename;// QFile file;};#endif // MYTHREAD_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QMoveEvent>
#include <QDragMoveEvent>
#include <QDragEnterEvent>
#include <QMimeData>
#include <QFileDialog>
#include <QDebug>
#include <mythread.h>
#include <QDropEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();protected:void dragEnterEvent(QDragEnterEvent *event);void dropEvent(QDropEvent *event) override;private:Ui::Widget *ui;QString filename;mythread* thread;signals:void send(QString filename);
};
#endif // WIDGET_H

mythread.cpp

#include "mythread.h"mythread::mythread(QObject* parent)
{}void mythread::run()
{QFile file1;file1.setFileName(filename);file1.open(QIODevice::ReadOnly);QFile file2;QFileInfo fileInfo(filename);QString file_end = fileInfo.fileName();//获取文件名QString path="D:/QTproject/"+file_end;//拼接文件路径+文件名file2.setFileName(path);file2.open(QIODevice::WriteOnly);double size=0;while(1){char arr[1024]="";int res=file1.read(arr,1024);if(res==0){qDebug()<<"传输数据大小: "<<size;return;}file2.write(arr,1024);size+=res;// qDebug()<<"传输数据大小: "<<size;}file1.close();file2.close();
}void mythread::fileio()
{}void mythread::rcv(QString filename)
{qDebug()<<filename;this->filename=filename;
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setAcceptDrops(1);thread=new mythread(this);QObject::connect(this,&Widget::send,thread,&mythread::rcv);}Widget::~Widget()
{delete ui;
}void Widget::dragEnterEvent(QDragEnterEvent *event)
{event->acceptProposedAction();}void Widget::dropEvent(QDropEvent *event)
{const QMimeData* mimedata=event->mimeData();//获取文件路径QList<QUrl> list=mimedata->urls();//获取所有的文件地址QUrl url=list[0];//获取第几个文件具体地址filename=url.toLocalFile();//转化成字符串类型emit send(filename);thread->start();
}

 运行截图:

相关文章:

使用QT + 文件IO + 鼠标拖拽事件 + 线程 ,实现大文件的传输

第一题、使用qss&#xff0c;通过线程&#xff0c;使进度条自己动起来 mythread.h #ifndef MYTHREAD_H #define MYTHREAD_H#include <QObject> #include <QThread> #include <QDebug>class mythread : public QThread {Q_OBJECT public:mythread(QObject* …...

【无人机路径规划】基于麻雀搜索算法(SSA)的无人机路径规划(Matlab)

效果一览 代码获取私信博主基于麻雀搜索算法&#xff08;SSA&#xff09;的无人机路径规划&#xff08;Matlab&#xff09; 一、算法背景与核心思想 麻雀搜索算法&#xff08;Sparrow Search Algorithm, SSA&#xff09;是一种受麻雀群体觅食行为启发的元启发式算法&#xff0…...

基于物联网技术的分布式光伏监控系统设计与实现

一、分布式光伏发电系统标准规范 1.常见应用场景 2.并网标准 Q/GDW1480-2015《分布式电源接入电网技术规定》 分布式电源并网电压等级可根据各并网点装机容量进行初步选择&#xff0c;推荐如下&#xff1a; 8kW 及以下可接入220V&#xff1b; 8kW~400kW可接入380V&#xf…...

阿里发布新开源视频生成模型Wan-Video,支持文生图和图生图,最低6G就能跑,ComFyUI可用!

Wan-Video 模型介绍&#xff1a;包括 Wan-Video-1.3B-T2V 和 Wan-Video-14B-T2V 两个版本&#xff0c;分别支持文本到视频&#xff08;T2V&#xff09;和图像到视频&#xff08;I2V&#xff09;生成。14B 版本需要更高的 VRAM 配置。 Wan2.1 是一套全面开放的视频基础模型&…...

27. Harmonyos Next仿uv-ui 组件NumberBox 步进器组件禁用状态

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 1. 组件介绍2. 效果展示3. 禁用状态设置3.1 整体禁用3.2 输入框禁用3.3 长按禁用 4. 完整示例代码5. 知识点讲解5.1 禁用状态属性5.2 禁用…...

【软件工程】一篇入门UML建模图(状态图、活动图、构件图、部署图)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...

AI智能导航站HTML5自适应源码帝国cms7.5模板

源码名称&#xff1a;AI导航站HTML5自适应源码帝国cms7.5模板 开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql var code "4d33ef8e-9e38-43b9-b37b-38f75944ecc9" 带软件采集&#xff0c;可以挂着自动采集发布&#xff0c;无需人工操作&#xff0…...

Redis 发布订阅模式详解:实现高效的消息通信

目录 引言 1. 什么是 Redis 发布订阅模式&#xff1f; 1.1 定义 1.2 核心概念 2. Redis 发布订阅的工作原理 2.1 基本流程 2.2 示例 2.3 频道与模式订阅 3. Redis 发布订阅的使用场景 3.1 实时消息通知 3.2 事件驱动架构 3.3 日志收集与分发 3.4 分布式锁与协调 4…...

ES的预置分词器

Elasticsearch&#xff08;简称 ES&#xff09;提供了多种预置的分词器&#xff08;Analyzer&#xff09;&#xff0c;用于对文本进行分词处理。分词器通常由字符过滤器&#xff08;Character Filters&#xff09;、分词器&#xff08;Tokenizer&#xff09;和词元过滤器&#…...

MPPT与PWM充电原理及区别详解

MPPT&#xff08;最大功率点跟踪&#xff09;和PWM&#xff08;脉宽调制&#xff09;是太阳能充电控制器中常用的两种技术&#xff0c;它们在原理、效率和适用场景上有显著区别。以下是两者的详细对比&#xff1a; 1. 工作原理 PWM&#xff08;脉宽调制&#xff09; 核心机制…...

【AGI】通往AGI的复兴号:模型工具演进与技术路径优化

通往AGI的复兴号&#xff1a;模型工具演进与技术路径优化 一、核心模型与工具技术指标及场景分析1. 边缘计算标杆&#xff1a;GLM-PC&#xff08;2024年11月&#xff09;2. 长文本处理王者&#xff1a;DeepSeek R1&#xff08;2025年1月&#xff09;3. 轻量化开源代表&#xff…...

java2025年常见设计模式面试题

1. 请解释建造者模式&#xff08;Builder Pattern&#xff09;及其应用场景。 答案&#xff1a; 建造者模式用于创建一个复杂的对象&#xff0c;同时允许用户只通过指定复杂对象的类型和内容就能构建它们&#xff0c;隐藏了复杂的构建逻辑。 示例&#xff1a; public class C…...

探索CAMEL:揭开多智能体系统的神秘面纱

在人工智能领域,多智能体系统(Multi-Agent Systems, MAS)一直是一个充满活力和潜力的研究方向。随着大语言模型(LLM)的快速发展,智能体之间的协作与交互变得更加复杂和智能。今天,我们要介绍的是一个名为CAMEL(Communicative Agents for “Mind” Exploration of Large…...

el-pagination的使用说明

<el-paginationv-model:current-page"pageNo" //当前第几页v-model:page-size"pageSize" //每页显示多少条数据:page-sizes"[10, 20, 30]" //控制每页显示的条数:small"true" //控制分页器大小:disabled&quo…...

UniApp 运行的微信小程序如何进行深度优化

UniApp 运行的微信小程序如何进行深度优化 目录 引言性能优化 1. 减少包体积2. 优化页面加载速度3. 减少 setData 调用4. 使用分包加载 代码优化 1. 减少不必要的代码2. 使用条件编译3. 优化图片资源 用户体验优化 1. 优化交互体验2. 预加载数据3. 使用骨架屏 调试与监控 1. …...

Web Worker如何在本地使用

首先了解一下什么是Web Worker Web Worker 是一种在后台线程中运行 JavaScript 的机制&#xff0c;允许你在不阻塞主线程的情况下执行耗时的任务。这对于保持网页的响应性和流畅性非常重要&#xff0c;特别是在需要进行复杂计算或大量数据处理时。 主要特点 多线程&#xff1…...

[原创](Modern C++)现代C++的关键性概念: 改掉new习惯, 尽情地使用智能分配内存

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、C …...

C/C++中使用CopyFile、CopyFileEx原理、用法、区别及分别在哪些场景使用

文章目录 1. CopyFile原理函数原型返回值用法示例适用场景 2. CopyFileEx原理函数原型返回值用法示例适用场景 3. 核心区别4. 选择建议5. 常见问题6.区别 在Windows系统编程中&#xff0c;CopyFile和CopyFileEx是用于文件复制的两个API函数。它们的核心区别在于功能扩展性和控制…...

android studio开发文档

android基本样式 1.文本 2.设置文本大小 3.字体颜色 背景 资源文件 xml’引用资源文件 4.视图宽高 5.间距 6.对齐方式 常用布局 1.linearLayout线性布局 2.相对布局 RelativeLayout 3.网格布局GridLayout 4.scrollview滚动视图 Button 点击事件与长按事件 长按 按钮禁用与…...

计算机网络笔记(二)——1.2互联网概述

1.2.1网络的网络 起源于美国的互联网现已发展成为世界上最大的覆盖全球的计算机网络。 下面&#xff0c;我们先来看看关于网络、互连网、互联网(因特网)的一些基本概念。为了方便&#xff0c;后面我们所称呼的"网络"往往就是"计算机网络",而不是电信网或有…...

5分钟快速上手:免费高效的B站视频解析终极方案

5分钟快速上手&#xff1a;免费高效的B站视频解析终极方案 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 你是否曾想保存喜欢的B站视频却苦于找不到合适的工具&#xff1f;bilibili-parse作为一款开…...

【仅限奇点大会注册开发者获取】:Istio for AI策略模板库(含RAG路由、推理超时分级、Token流控等12个YAML黄金配置)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生服务网格应用&#xff1a;2026奇点智能技术大会Istio for AI 在2026奇点智能技术大会上&#xff0c;Istio社区正式发布 Istio for AI —— 一个专为大模型推理、微调与多租户AI工作负载设计的服务…...

League Akari终极指南:基于LCU API的英雄联盟专业工具包完整解析与快速部署方案

League Akari终极指南&#xff1a;基于LCU API的英雄联盟专业工具包完整解析与快速部署方案 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还…...

8086/8088单板机VSCode集中环境开发编译(第二版整理)

对于8086/8088单板机而言&#xff0c;集中的开发环境方便友好。下面是使用VSCode集中开发环境对8086/8088单板机集中编辑、编译、串口下载的使用步骤第一步&#xff0c;在VSCode文件中&#xff0c;选择打开例程文件夹第二部&#xff0c;根据需要对例程main.c进行编辑修改第三步…...

JPEXS Flash反编译器技术架构解析:遗留Flash资产现代化迁移方案

JPEXS Flash反编译器技术架构解析&#xff1a;遗留Flash资产现代化迁移方案 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 在数字化转型进程中&#xff0c;大量遗留的Flash应用程序成为…...

5G网络中的存储功能革新:NRF技术深度解析

5G网络中的存储功能革新&#xff1a;NRF技术深度解析 在5G通信技术的快速发展浪潮中&#xff0c;网络功能虚拟化&#xff08;NFV&#xff09;与软件定义网络&#xff08;SDN&#xff09;作为两大核心支柱&#xff0c;正引领着网络架构的深刻变革。其中&#xff0c;网络存储功能…...

别埋头苦选了!用对方法,俄罗斯的爆款就是你的货源!

标题建议&#xff08;任选其一&#xff09;&#xff1a;&#x1f525; 扒光了同行底裤&#xff1a;跨境电商“无货源拿货”的顶级神操作&#xff0c;原来他们都在这么干&#xff01;别再傻乎乎囤货了&#xff01;一张图看懂“Ozon爆品 ➡️ 1688源头”的极速变现闭环。跨境圈不…...

QMCDecode:3分钟解锁QQ音乐加密格式,让音乐真正属于你

QMCDecode&#xff1a;3分钟解锁QQ音乐加密格式&#xff0c;让音乐真正属于你 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#…...

告别黑盒:手把手教你用S-Function在Simulink里打造自己的16QAM调制解调模块

从零构建16QAM通信链路&#xff1a;Simulink S-Function深度开发指南 在通信系统仿真领域&#xff0c;现成模块虽然方便&#xff0c;却常常成为深入理解底层原理的障碍。当我们需要验证特定算法、优化系统性能或进行教学演示时&#xff0c;自主构建核心模块的能力显得尤为重要…...

从 CDS 到服务契约,读懂 ABAP Cloud 的 Model-Driven Architecture

很多做 RAP 的同学,在 ADT 里第一次同时创建 CDS view entity、behavior definition、service definition、service binding 的时候,直觉往往是,为什么对象一下子变这么多。等项目真正推进到发票、销售订单、主数据维护、审批动作、事件集成这些场景,就会慢慢体会到,这套做…...