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

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);


http://www.kler.cn/a/469918.html

相关文章:

  • C#高级:递归4-根据一颗树递归生成数据列表
  • mv指令详解
  • Backend - C# EF Core 执行迁移 Migrate
  • OpenCV轮廓相关操作API (C++)
  • 使用WebSocket 获取实时数据
  • CSS Grid 布局示例(基本布局+代码属性描述)
  • 算法解析-经典150(图论、回溯法)
  • websocket在各主流浏览器中默认的请求头是如何设置的?
  • SQL语言的语法糖
  • 【MySQL】表的基本操作
  • MYSql------视图
  • 基于transformer的目标检测:DETR
  • KAGGLE竞赛实战2-捷信金融违约预测竞赛-part1-数据探索及baseline建立
  • 结构型模式2.桥接模式
  • springboot配置线程池
  • 今日总结 2025-01-06
  • 软件工程大复习之(四)——面向对象与UML
  • win32汇编环境,在窗口程序中画五边形与六边形
  • Unity3D PBR光照计算公式推导详解
  • 土建施工员考试题库及答案
  • 社交新零售下开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序的促单策略研究
  • MR20强抗干扰一体式IO模块的革新力量
  • KACL:Knowledge-Adaptive Contrastive Learning for Recommendation
  • C++ 原子变量
  • Bash语言的函数实现
  • Spring Boot 项目离线环境手动构建指南