欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > QT实现 端口扫描暂停和继续功能 3

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

2025/1/9 1:16:53 来源:https://blog.csdn.net/Yungoal/article/details/144967834  浏览:    关键词: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);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com