QT实现 端口扫描暂停和继续功能 3

上篇QT给端口扫描工程增加线程2-CSDN博客

为按钮pushButton_Stop添加clicked事件,功能为暂停扫描,并在暂停后显示继续按钮,点击继续按钮之后继续扫描

1.更新UI

添加继续按钮

点击转到槽则会自动声明

2. 更新 MainWindow.h

需要新增的部分

private slots:  
    void on_pushButton_Stop_clicked(); // 暂停按钮点击事件  
    void on_pushButton_Continue_clicked(); // 继续按钮点击事件  

private:  
    bool isPaused; // 用于跟踪扫描是否暂停

3. 更新 MainWindow.cpp

在 MainWindow.cpp 中实现暂停和继续的功能。

3.1 初始化成员变量

在构造函数中初始化 isPaused 变量,并设置 pushButton_Continue 为隐藏状态:

MainWindow::MainWindow(QWidget *parent) :  
    QMainWindow(parent),  
    ui(new Ui::MainWindow),  
    isPaused(false) // 初始化为未暂停状态  
{  
    ui->setupUi(this);  
    ui->pushButton_Continue->setVisible(false); // 隐藏继续按钮  
}

3.2 实现暂停功能

在 on_pushButton_Stop_clicked() 槽函数中,设置 isPaused 为 true,并隐藏暂停按钮,显示继续按钮:

void MainWindow::on_pushButton_Stop_clicked() {  
    isPaused = true; // 设置为暂停状态  
    ui->pushButton_Stop->setEnabled(false); // 禁用暂停按钮  
    ui->pushButton_Continue->setVisible(true); // 显示继续按钮  
}

3.3 实现继续功能

在 on_pushButton_Continue_clicked() 槽函数中,设置 isPaused 为 false,并隐藏继续按钮,启用暂停按钮:

void MainWindow::on_pushButton_Continue_clicked() {  
    isPaused = false; // 设置为继续状态  
    ui->pushButton_Stop->setEnabled(true); // 启用暂停按钮  
    ui->pushButton_Continue->setVisible(false); // 隐藏继续按钮  

    // 继续扫描的逻辑  
    // 这里可以调用一个函数来继续扫描  
    continueScanning();  
}

4. 修改扫描逻辑

在 MyThread 类中,您需要修改扫描逻辑,以便在扫描过程中检查 isPaused 状态。如果扫描被暂停,则线程应等待,直到继续按钮被点击。

4.1更新 MyThread.h

4.2更新 MyThread.cpp

在 MyThread.cpp 中实现 setPaused 方法,并在 run() 方法中检查 isPaused 状态:  

void MyThread::setPaused(bool paused) {  
    isPaused = paused; // 更新暂停状态  
}  

while (isPaused) {  
            msleep(100); // 暂停扫描,避免 CPU 占用过高  
        }  
4.3在主窗口中管理暂停和继续

在点击暂停和继续按钮时调用 setPaused 方法。

5.连接信号和槽

因为先点击扫描才会有后面的暂停和继续,所以我选择把这个步骤放到扫描按钮点击事件处理函数
void MainWindow::on_pushButton_Scan_clicked()中

connect(ui->pushButton_Stop, &QPushButton::clicked, this, &MainWindow::on_pushButton_Stop_clicked);  
connect(ui->pushButton_Continue, &QPushButton::clicked, this, &MainWindow::on_pushButton_Continue_clicked);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车微处理器安全机制以及测试介绍

本文介绍了三类汽车微处理器安全机制:硬件类、软件类和混合类,旨在提高系统的可靠性和安全性。硬件类安全机制包括逻辑内建自测试(Logic-BIST)、三重模块冗余(TMR)、内存内建自测试(Memory-BIST…

【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答

问题描述 PHP应用再连接Azure Redis服务时,出现Connection Timed out。当通过升级提高Azure Redis的性能时候,发现之前的数据丢失了。 image.png 问题解答 当Redis服务出现Timeout的情况时,可以从Redis服务的指标(Metrics)开始查看&#xff0…

python学习笔记—15—数据容器之列表

1. 数据容器 列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict) 2. 列表 (1) 定义 tmp_list ["super", "carry", "doinb"] print(f"tmp_list {tmp_list}, tmp_list type is {type(tmp_list)}") tmp_list1 ["doi…

记录一次面试中被问到的问题 (HR面)

文章目录 一、你对公司的了解多少二、为什么对这个岗位感兴趣三、不能说的离职原因四、离职原因高情商回复五、你的核心优势是什么六、你认为你比其他面试候选人的优势是什么七、不要提及情感 一、你对公司的了解多少 准备要点: 在面试前,对公司进行充分…

VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读

VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读 导读:这篇论文介绍了CogAgent,一个专注于图形用户界面 (GUI) 理解和导航的视觉语言模型 (VLM)。这篇论文提出了一种新的视觉语言模型 CogAgent&#…

linux audio(1)-pulseaudio模块数据流

本文主要讨论pulseaudio模块的数据流。这里的模块(module)主要限制在sink和source这两种类型。其他类型的数据流后续有空 再撰文讨论。 pulseaudio的模块一般会启动一路线程进行数据的搬运和处理。 下面的是module-null-source模块的数据搬运线程启动代码。 进入thread_func…

ros2-4.1 服务通信介绍

服务是ROS图中节点之间的另一种通信方法。服务分为客户端和服务端,客户端发送请求给服务端,服务端可以根据客户端的请求做一些处理,然后返回结果给客户端。也称为为请求-响应模型。 服务和话题的不同之处,话题是没有返回的&#…

微信小程序之历史上的今天

微信小程序之历史上的今天 需求描述 今天我们再来做一个小程序,主要是搜索历史上的今天发生了哪些大事,结果如下 当天的历史事件或者根据事件选择的历史事件的列表: 点击某个详细的历史事件以后看到详细信息: API申请和小程序…

数据库模型全解析:从文档存储到搜索引擎

目录 前言1. 文档存储(Document Store)1.1 概念与特点1.2 典型应用1.3 代表性数据库 2. 图数据库(Graph DBMS)2.1 概念与特点2.2 典型应用2.3 代表性数据库 3. 原生 XML 数据库(Native XML DBMS)3.1 概念与…

Vue3+TS+vite项目笔记1

vue2与vue3的比较 源码的升级 使用Proxy代替defineProperty实现响应式。 重写虚拟DOM的实现和Tree-Shaking。 新的特性 Composition API(组合API): setup ref与reactive computed与watch ...... 新的内置组件: Fragment T…

Spring5框架之SpringMVC

目录 1.SpringMVC的入门案例 1.1 通过maven构建一个web项目 1.2 添加对应的依赖及Tomcat插件 1.3 创建SpringMVC的配置文件 1.4 在web.xml中注册DispatchServlet 1.5 创建自定义的Controller 1.6 在Springmvc配置文件中注册 原理分析: 2.SpringMVC基于注解的…

Android Audio基础(53)——PCM逻辑设备Write数据

1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在 ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图。: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间数据不能随便…

【漫话机器学习系列】039.点积(dot product)

点积(Dot Product) 点积是线性代数中的一种基本运算,用于两个向量的操作。它是将两个向量按分量相乘并求和的结果,用于衡量两个向量在同一方向上的相似性。 点积的定义 给定两个相同维度的向量 和 ,它们的点积定义为…

2024年大型语言模型(LLMs)的发展回顾

2024年对大型语言模型(LLMs)来说是充满变革的一年。以下是对过去一年中LLMs领域的关键进展和主题的总结。 GPT-4的壁垒被打破 去年,我们还在讨论如何构建超越GPT-4的模型。如今,已有18个组织拥有在Chatbot Arena排行榜上超越原…

Visual Studio 2022 C++ gRPC 环境搭建

文章目录 1、gRPC 安装2、创建项目2.1、创建 “空的解决方案”2.2、新建 gRPCServer 和 gRPCClient 项目2.3、创建 proto 文件 2、为 gRPC 服务端和客服端项目配置 protobuf 编译2.1、protobuf 配置2.2、gRPCServer 项目配置2.3、gRPCClient 项目配置 3、测试3.1、启动服务端程…

Wasm是什么

WebAssembly 是什么? 1.1 WebAssembly 的定义 WebAssembly(简称 Wasm)是一种二进制指令格式,设计用于在现代 Web 浏览器中高效运行程序。它可以被认为是一种低级的、接近硬件的编程语言,是一种介于字节码和机器码之间…

使用深度学习来实现图像超分辨率 综述!

今天给大家介绍一篇图像超分辨率邻域的综述,这篇综述总结了图像超分辨率领域的几方面:problem settings、数据集、performance metrics、SR方法、特定领域应用以结构组件形式,同时,总结超分方法的优点与限制。讨论了存在的问题和挑…

直播预告|StarRocks 3.4,打造 AI 时代的智能数据基座,应用场景全面扩展

随着新年的到来,StarRocks 3.4 即将上线,为 AI Workload 和更多应用场景提供强大支持!此次升级聚焦于提升 AI 场景支持,并扩展更多应用场景,全方位提升数据分析体验。 更强的 AI 场景支持: 引入 Vector In…

【GOOD】A Survey of Deep Graph Learning under Distribution Shifts

深度图学习在分布偏移下的综述:从图的分布外泛化到自适应 Northwestern University, USA Repository Abstract 图上的分布变化——训练和使用图机器学习模型之间的数据分布差异——在现实世界中普遍存在,并且通常不可避免。这些变化可能会严重恶化模…

【微服务】5、服务保护 Sentinel

Sentinel学习内容概述 Sentinel简介与结构 Sentinel是Spring Cloud Alibaba的组件,由阿里巴巴开源,用于服务流量控制和保护。其内部核心库(客户端)包含限流、熔断等功能,微服务引入该库后只需配置规则。规则配置方式有…