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

03.06 QT

一、使用QSlider设计一个进度条,并让其通过线程自己动起来

程序代码:

<1> Widget.h:

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

<2> Widget.cpp:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);thread = new myThread(this);//创建线程QObject::connect(thread,&myThread::pupdate,ui->horizontalSlider,&QSlider::setValue);QString qss = (R"(QSlider {background-color: transparent;}QSlider::groove:horizontal {background-color: #E0E0E0;height: 10px;border-radius: 5px;}QSlider::sub-page:horizontal {background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #6A11CB, stop:1 #2575FC);border-radius: 5px;box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);}QSlider::handle:horizontal {background: #FFFFFF;width: 16px;height: 16px;margin: -4px 0;border-radius: 8px;border: 2px solid #2575FC;box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);})");ui->horizontalSlider->setStyleSheet(qss);}Widget::~Widget()
{thread->terminate();delete ui;
}void Widget::on_pushButton_clicked()
{thread->start();
}void Widget::on_pushButton_2_clicked()
{thread->terminate();
}

<3> myThread.h:

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QThread>
#include <QSlider>class myThread : public QThread
{Q_OBJECT
public:myThread(QObject* parent = nullptr);protected:virtual void run() override;signals:void pupdate(int progress);private:};#endif // MYTHREAD_H

<4> myThread.cpp:

#include "mythread.h"myThread::myThread(QObject* parent):QThread(parent)
{}void myThread::run()
{int progress = 0;while(1){QThread::usleep(5000);progress = (progress + 1) % 101;emit pupdate(progress);}
}

运行结果:

二、

  1. 使用 QFileDialog  + QT文件IO + QT线程。

  2. 实现一个文件复制功能,要求能够复制大小超过800MB的文件。

  3. 额外要求:在文件拷贝时,追加一个进度条显示拷贝了多少文件内容。

程序代码:

<1> Widget.h:

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

<2> Widget.cpp:

#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);thread = new myThread(this);connect(thread, &myThread::pupdate, ui->horizontalSlider, &QSlider::setValue);QString qss = (R"(QSlider {background-color: transparent;}QSlider::groove:horizontal {background-color: #E0E0E0;height: 10px;border-radius: 5px;}QSlider::sub-page:horizontal {background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #6A11CB, stop:1 #2575FC);border-radius: 5px;box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);}QSlider::handle:horizontal {background: #FFFFFF;width: 16px;height: 16px;margin: -4px 0;border-radius: 8px;border: 2px solid #2575FC;box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.2);})");ui->horizontalSlider->setStyleSheet(qss);
}Widget::~Widget()
{thread->terminate();delete ui;
}void Widget::on_pushButton_clicked()
{QString sourceFilePath = QFileDialog::getOpenFileName(this, "Select Source File");if (sourceFilePath.isEmpty()) {return;}QString destinationFilePath = QFileDialog::getSaveFileName(this, "Select Destination File");if (destinationFilePath.isEmpty()) {return;}thread->setFilePaths(sourceFilePath, destinationFilePath);thread->start();
}void Widget::on_pushButton_2_clicked()
{thread->terminate();
}

<3> myThread.h:

#ifndef MYTHREAD_H
#define MYTHREAD_H#include <QThread>
#include <QFile>class myThread : public QThread
{Q_OBJECT
public:myThread(QObject* parent = nullptr);void setFilePaths(const QString &source, const QString &destination);protected:virtual void run() override;signals:void pupdate(int progress);private:QString sourcePath;QString destinationPath;
};#endif // MYTHREAD_H

<4> myThread.cpp:

#include "mythread.h"
#include <QFile>
#include <QDebug>myThread::myThread(QObject* parent): QThread(parent)
{
}void myThread::setFilePaths(const QString &source, const QString &destination)
{sourcePath = source;destinationPath = destination;
}void myThread::run()
{QFile sourceFile(sourcePath);QFile destinationFile(destinationPath);if (!sourceFile.open(QIODevice::ReadOnly)) {qDebug() << "Failed to open source file";return;}if (!destinationFile.open(QIODevice::WriteOnly)) {qDebug() << "Failed to open destination file";sourceFile.close();return;}qint64 fileSize = sourceFile.size();qint64 totalBytesRead = 0;char buffer[4096];while (!sourceFile.atEnd()) {qint64 bytesRead = sourceFile.read(buffer, sizeof(buffer));destinationFile.write(buffer, bytesRead);totalBytesRead += bytesRead;int progress = static_cast<int>((totalBytesRead * 100) / fileSize);emit pupdate(progress);}sourceFile.close();destinationFile.close();
}

运行结果:

相关文章:

03.06 QT

一、使用QSlider设计一个进度条&#xff0c;并让其通过线程自己动起来 程序代码&#xff1a; <1> Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QThread> #include "mythread.h"QT_BEGIN_NAMESPACE namespace Ui {…...

Python中的常用库

一、collections collections是 Python 标准库中的一个模块&#xff0c;提供了一些专门的容器数据类型&#xff0c;能够帮助你更高效地处理常见的数据结构操作。 1、Counter Counter 是一个字典的子类&#xff0c;用于计数可哈希对象。它会统计对象的出现次数&#xff0c;并…...

马尔科夫不等式和切比雪夫不等式

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 统计概率的利剑&#xff1a;掌…...

护照阅读器在汽车客运站流程中的应用

在汽车客运站的日常运营里&#xff0c;如何高效服务旅客、保障出行安全是工作重点。护照阅读器作为精准身份识别的得力工具&#xff0c;在客运站的多个关键流程&#xff0c;如自助购票、柜台购票、安检以及行李托运中&#xff0c;发挥着不可小觑的作用&#xff0c;有力地提升了…...

CentOS 7 安装Nginx-1.26.3

无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载&#xff1a; http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…...

Unity 使用NGUI制作无限滑动列表

原理&#xff1a; 复用几个子物体&#xff0c;通过子物体的循环移动实现&#xff0c;如下图 在第一个子物体滑动到超出一定数值时&#xff0c;使其放到最下方 --------------------------------------------------------------》 然后不停的循环往复&#xff0c;向下滑动也是这…...

linux中断调用流程(arm)

文章目录 ARM架构下Linux中断处理全流程解析&#xff1a;从硬件触发到驱动调用 ⚡**一、中断触发与硬件层响应** &#x1f50c;**1. 设备触发中断** &#x1f4e1; **二、CPU阶段&#xff1a;异常入口与上下文处理** &#x1f5a5;️**1. 异常模式切换** &#x1f504;**2. 跳转…...

基于Matlab的多目标粒子群优化

在复杂系统的设计、决策与优化问题中&#xff0c;常常需要同时兼顾多个相互冲突的目标&#xff0c;多目标粒子群优化&#xff08;MOPSO&#xff09;算法应运而生&#xff0c;作为群体智能优化算法家族中的重要成员&#xff0c;它为解决此类棘手难题提供了高效且富有创新性的解决…...

【网络安全】——协议逆向与频繁序列提取:从流量中解码未知协议

目录 引言 一、为什么要结合频繁序列提取&#xff1f; 二、四步融合分析法 步骤1&#xff1a;原始流量采集与预处理 步骤2&#xff1a;多粒度序列模式挖掘 层1&#xff1a;单包内字节级频繁项 层2&#xff1a;跨数据包的行为序列 步骤3&#xff1a;关键字段定位与结构假…...

CSS 中等比例缩放的演变:从传统技巧到 aspect-ratio 属性

CSS 中等比例缩放的演变&#xff1a;从传统技巧到 aspect-ratio 属性 在响应式网页设计和多设备兼容成为主流的今天&#xff0c;如何实现元素的等比例缩放成为前端开发中一个重要的课题。无论是图片、视频还是其他容器&#xff0c;都常常需要保持固定的宽高比&#xff0c;以便…...

系统架构设计师—计算机基础篇—进度管理

文章目录 基本概念进程的特征进程的状态前趋图 进程的通信进程的互斥做题方法 进程的同步PV操作做题方法 基本概念 进程的特征 进程通常由程序、数据集合、进程控制块PCB组成。 PCB是一种数据结构&#xff0c;是进程存在的唯一标识。 组织方式说明线性方式把所有PCB组织在一…...

初始提示词(Prompting)

理解LLM架构 在自然语言处理领域&#xff0c;LLM&#xff08;Large Memory Language Model&#xff0c;大型记忆语言模型&#xff09;架构代表了最前沿的技术。它结合了存储和检索外部知识的能力以及大规模语言模型的强大实力。 LLM架构由外部记忆模块、注意力机制和语…...

Ollama+AnythingLLM安装

一、文件准备 ‌ 1. 安装包获取‌ 从联网设备下载&#xff1a; AnythingLLMDesktopInstaller.exe&#xff08;官网离线安装包&#xff09;‌ deepseek-r1-1.5b.gguf&#xff08;1.5B 参数模型文件&#xff09;‌ 2. ‌传输介质‌ 使用 U 盘或移动硬盘拷贝以下文件至离线设…...

docker拉取失败

备份原始配置文件 sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak 清理或修复 daemon.json 文件 sudo nano /etc/docker/daemon.json 删除 文件中的所有内容&#xff0c;确保文件为空。 cv下面这个文件内容 { "registry-mirrors": [ &…...

PHP之Cookie和Session

在你有别的编程语言的基础下&#xff0c;你想学习PHP&#xff0c;可能要了解的一些关于cookie和session的信息。 Cookie 参数信息 setcookie(name,value,expire, path, domain); name : Cookie的名称。 value : Cookie的值。 expire : Cookie的过期时间&#xff0c;可以是一…...

【万字长文】基于大模型的数据合成(增强)及标注

写在前面 由于合成数据目前是一个热门的研究方向&#xff0c;越来越多的研究者开始通过大模型合成数据来丰富训练集&#xff0c;为了能够从一个系统的角度去理解这个方向和目前的研究方法便写了这篇播客&#xff0c;希望能对这个领域感兴趣的同学有帮助&#xff01; 欢迎点赞&…...

CES Asia 2025增设未来办公教育板块,科技变革再掀高潮

作为亚洲消费电子领域一年一度的行业盛会&#xff0c;CES Asia 2025&#xff08;第七届亚洲消费电子技术贸易展&#xff09;即将盛大启幕。今年展会规模再度升级&#xff0c;预计将吸引超过500家全球展商参展&#xff0c;专业观众人数有望突破10万。除了聚焦人工智能、物联网、…...

Python详细安装教程——Python及PyCharm超详细安装教程:新手小白也能轻松搞定!(最新版)

Python作为一门简单易学、功能强大的编程语言&#xff0c;近年来在数据分析、人工智能、Web开发等领域广受欢迎。而PyCharm作为一款专业的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了强大的代码编辑、调试和项目管理功能&#xff0c;是Python开发者的得力…...

游戏引擎学习第137天

演示资产系统中的一个 bug 我们留下了个问题&#xff0c;你现在可以看到&#xff0c;移动时它没有选择正确的资产。我们知道问题的原因&#xff0c;就在之前我就预见到这个问题会出现。问题是我们的标签系统没有处理周期性边界的匹配问题。当处理像角度这种周期性的标签时&…...

RAGflow升级出错,把服务器灌满了

使用自动化更新命令&#xff0c;从16升级到17&#xff0c;结果发现出现了大问题&#xff0c;不断下载&#xff0c;一直无法下载完毕。 df -h 直接把服务器搞满了。哈哈哈哈~。查看一下&#xff1a; sudo du -sh /var/lib/docker确认是docker里面安装的ragflow有问题。所以&am…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…...