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

QT 端口扫描附加功能实现 端口扫描5

上篇QT 下拉菜单设置参数 起始端口/结束端口/线程数量 端口扫描4-CSDN博客

在扫描结束后设置Scan按钮为可用,并提示扫描完成

在 MainWindow 类中添加一个成员变量来跟踪正在进行的扫描任务数量:

在 MainWindow 的构造函数中初始化 activeScanTasks

在按下scan之后重置任务计数

每扫描一次就++

扫描完成后会发送信号给槽函数,在槽函数中实现提示消息和重启按钮功能

每完成一个扫描任务tasks--

全部完成之后task==0

在扫描时显示扫描进度

在 Qt Designer 中,向 MainWindow 添加一个 QProgressBar,并设其 objectName 为 progressBar。确保它的范围是从 0 到 100。

赋初值

计算实际值

点击scan重置进度条

扫描完成之后,发送信号-->在 recv_result 槽函数中,更新进度条的值

使用 invokeMethod 确保在主线程中更新 UI

最初将continue按钮隐藏,点击stop按钮之后之后显示continue按钮,按下continue按钮之后继续扫描

点击scan时

void MainWindow::on_stopButton_clicked()  
{  
    // 停止所有正在运行的任务  
    threadpool->clear(); // 清理线程池中未执行完的任务  
    ui->pushButton_Scan->setEnabled(true); // 重新启用扫描按钮  
    isPaused = true; // 设置为暂停状态  
    ui->pushButton_Continue->setVisible(true); // 显示继续按钮  
}
void MainWindow::on_pushButton_Stop_clicked()
{
    // 停止所有正在运行的任务  
    threadpool->clear(); // 清理线程池中未执行完的任务  
    ui->pushButton_Scan->setEnabled(true); // 重新启用扫描按钮  
    isPaused = true; // 设置为暂停状态  
    ui->pushButton_Continue->setVisible(true); // 显示继续按钮 
}
void MainWindow::on_pushButton_Continue_clicked()  
{  
    isPaused = false; // 设置为继续扫描状态  
    ui->pushButton_Continue->setVisible(false); // 隐藏继续按钮  
    ui->pushButton_Stop->setEnabled(true); // 启用停止按钮  

    // 继续扫描未完成的任务  
    for (int i = currentPort; i < totalPorts; ++i) {  
        if (!isPaused) { // 检查是否已暂停  
            ScanTask *task = new ScanTask(ui->lineEdit_IP->text(), i);  
            connect(task, &ScanTask::send_scan_signal, this, &MainWindow::recv_result);  
            threadpool->start(task);  
            activeScanTasks++;  
            currentPort++; // 更新当前扫描的端口  
            QThread::msleep(12);  
        } else {  
            break; // 如果已暂停,退出循环  
        }  
    }  
}

每次扫描完成(一次),槽函数中更新当前扫描的端口

槽函数void MainWindow::recv_result(int port, bool isOpen) 中,在扫描完成后变换暂停状态


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

相关文章:

  • 通过Apache、Nginx限制直接访问public下的静态文件
  • Yolo11改进:注意力改进|Block改进|ESSAformer,用于高光谱图像超分辨率的高效Transformer|即插即用
  • C语言初阶习题【25】strcpy的模拟实现
  • 优化提示词改善答疑机器人回答质量
  • TensorRT-LLM中的MoE并行推理
  • 怎么用vs编python文件
  • 新活动平台建设历程与架构演进
  • C#,图论与图算法,任意一对节点之间最短距离的弗洛伊德·沃肖尔(Floyd Warshall)算法与源程序
  • 【Redis源码】 RedisObject结构体
  • 基于Springboot科研工作量管理系统【附源码】
  • MySQL innodb中一条sql的执行流程
  • 时序数据库InfluxDB—介绍与性能测试
  • 服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例
  • 社交策略:双重话语与共情之道
  • 漏学Input知识系列之“偷”走了其他窗口的事件pilferPointers
  • 【学习资源】MBSE和工业软件
  • Ollama私有化部署大语言模型LLM
  • 人工智能学习路线全链路解析
  • 基于大数据可视化+django+爬虫的李宁品牌销售数据分析系统设计和实现(源码+论文+部署讲解等)
  • Ubuntu安装vscode
  • 相对误差与相对误差限
  • C++ 多线程异步操作
  • Windows 安装 Docker 和 Docker Compose
  • 如何用 Python 实现简单的 AI 模型?
  • jQuery UI 主题
  • 怎么抓取ios 移动app的https请求?