首页 > 其他分享 >QT实现 端口扫描暂停和继续功能 3

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

时间:2025-01-07 23:28:43浏览次数:9  
标签:clicked QT 端口扫描 pushButton isPaused 按钮 暂停 MainWindow

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

标签:clicked,QT,端口扫描,pushButton,isPaused,按钮,暂停,MainWindow
From: https://blog.csdn.net/Yungoal/article/details/144967834

相关文章

  • MQTT和传统消息队列(RabbitMQ,RocketMQ,Kafka)的区别
    适用场景选择哪种协议取决于具体的应用需求。如果需要适用于大量传感器和控制设备之间的通信,且网络环境不稳定或需要节省带宽资源,MQTT是一个不错的选择。而如果需要在浏览器和服务端之间建立实时双向通信,且对实时性和双向交互有较高要求,WebSocket可能更加适合。   产......
  • 保护性暂停原理
    什么是保护性暂停?保护性暂停(GuardedSuspension)是一种常见的线程同步设计模式,常用于解决生产者-消费者问题或其他需要等待条件满足后再继续执行的场景。通过这种模式,一个线程在执行过程中会检查某个条件是否满足,如果不满足,就进入等待状态,直到另一个线程通知条件已满足。......
  • Qt天气预报系统鼠标拖动窗口
    Qt天气预报系统1、鼠标拖动窗口1.1重写鼠标移动函数1.2添加定义1.3定义一个偏移值1.4判断鼠标左键是否被按下1.5计算当前鼠标位置与窗口左上角位置的偏移值1.6移动窗口2、.h文件和.cpp文件2.1.h文件2.2.cpp文件3、结论1、鼠标拖动窗口1.1重写鼠标移动函数protec......
  • Qt中文乱码的一种解决方法(ISO-8859-1和GBK编码互转)
    问题描述:在老项目数据库中,中文显示乱码,编码格式未知,一度怀疑进行了加密。问题定位:最终,经过大佬的尝试,发现是编码格式的问题。老项目中是将GBK编码的中文字符按照ISO-8859-1编码存入,导致乱码。解决方法(Qt):voidtest(){//读取数据库QSqlDatabasedb;QSqlQuery......
  • C++ Qt练习项目 QSpinBox和QDoubleSpinBos 未完待续
    个人学习笔记新建项目设计UI......
  • Qt 写无边框窗口时,遇到的问题与解决方法
    一、无边框窗口问题/需求汇总:1、窗口最大化时闪屏、卡顿问题。2、鼠标左键可移动窗口,但只在窗口上下左右30以内区域可移动,其它地方不可移动。3、双屏幕时,窗口最大、向下还原需要在当前屏幕显示,不回到主屏幕。4、窗口正常显示时在屏幕中间区域。5、窗口最大化显示......
  • Qt 状态机使用说明
    一、前言1、状态机,有限状态机,FiniteStateMachine,简写FSM。2、状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。3、简单说,状态机就是负责执行各种状态的切换。4、Qt状态机通过Qt......
  • Qt天气预报系统界面关闭
    Qt天气预报系统界面关闭1、点击右上角x退出1.1添加控件1.2修改控件名字1.3编程实现控件功能2、鼠标右键退出2.1重写鼠标点击事件2.2添加定义2.3添加一个菜单2.3.1创建一个菜单指针2.3.2创建一个菜单对象2.3.3显示菜单2.3.4定义一个菜单退出动作2.3.5在当前鼠标位置显示......
  • 使用MingW-w64 编译 64bit Qt5
    现在Qt官方提供的mingw编译器的预编译版本都是32bit的,如果想使用64bit的话需要自己手动进行编译。自己编译的话只需要下载mingw-w64编译器和Qt的源码,之前在官方Wiki上看到还需要Perl,实际测试发现没有Perl也可以正常编译。mingw-w64直接去mingw-w64官网下载就可以了,选择MingW-W64......
  • nmap在windows几种端口扫描方式和报告转换(保姆级)
    nmap作用和简介:nmap是一个开源的免费的网络探测工具,可以用来探测存活主机以及开放的端口,支持window,Linux,mac等多种操作系统。官网:http://nmap.org/download.html,nmap非常强大,而且开源免费,也支持在windows下使用常用功能:1.探测存活主机2.扫描端口及服务3.探测主机操作系......