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

打印 上一主题 下一主题

主题 892|帖子 892|积分 2676

上篇QT给端口扫描工程增长线程2-CSDN博客
为按钮pushButton_Stop添加clicked变乱,功能为停息扫描,并在停息后显示继续按钮,点击继续按钮之后继续扫描

1.更新UI

添加继续按钮
点击转到槽则会自动声明

2. 更新 MainWindow.h

须要新增的部门
  1. private slots:  
  2.     void on_pushButton_Stop_clicked(); // 暂停按钮点击事件  
  3.     void on_pushButton_Continue_clicked(); // 继续按钮点击事件  
  4. private:  
  5.     bool isPaused; // 用于跟踪扫描是否暂停
复制代码
3. 更新 MainWindow.cpp


在 MainWindow.cpp 中实现停息和继续的功能。
3.1 初始化成员变量

在构造函数中初始化 isPaused 变量,并设置 pushButton_Continue 为隐藏状态:
  1. MainWindow::MainWindow(QWidget *parent) :  
  2.     QMainWindow(parent),  
  3.     ui(new Ui::MainWindow),  
  4.     isPaused(false) // 初始化为未暂停状态  
  5. {  
  6.     ui->setupUi(this);  
  7.     ui->pushButton_Continue->setVisible(false); // 隐藏继续按钮  
  8. }
复制代码

3.2 实现停息功能

在 on_pushButton_Stop_clicked() 槽函数中,设置 isPaused 为 true,并隐藏停息按钮,显示继续按钮:
  1. void MainWindow::on_pushButton_Stop_clicked() {  
  2.     isPaused = true; // 设置为暂停状态  
  3.     ui->pushButton_Stop->setEnabled(false); // 禁用暂停按钮  
  4.     ui->pushButton_Continue->setVisible(true); // 显示继续按钮  
  5. }
复制代码
3.3 实现继续功能

在 on_pushButton_Continue_clicked() 槽函数中,设置 isPaused 为 false,并隐藏继续按钮,启用停息按钮:
  1. void MainWindow::on_pushButton_Continue_clicked() {  
  2.     isPaused = false; // 设置为继续状态  
  3.     ui->pushButton_Stop->setEnabled(true); // 启用暂停按钮  
  4.     ui->pushButton_Continue->setVisible(false); // 隐藏继续按钮  
  5.     // 继续扫描的逻辑  
  6.     // 这里可以调用一个函数来继续扫描  
  7.     continueScanning();  
  8. }
复制代码
4. 修改扫描逻辑

在 MyThread 类中,您须要修改扫描逻辑,以便在扫描过程中查抄 isPaused 状态。假如扫描被停息,则线程应等候,直到继续按钮被点击。
4.1更新 MyThread.h



4.2更新 MyThread.cpp

在 MyThread.cpp 中实现 setPaused 方法,并在 run() 方法中查抄 isPaused 状态:  
  1. void MyThread::setPaused(bool paused) {  
  2.     isPaused = paused; // 更新暂停状态  
  3. }  
复制代码

  1. while (isPaused) {  
  2.             msleep(100); // 暂停扫描,避免 CPU 占用过高  
  3.         }  
复制代码
4.3在主窗口中管理停息和继续

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

5.连接信号和槽

因为先点击扫描才会有背面的停息和继续,以是我选择把这个步骤放到扫描按钮点击变乱处理函数
void MainWindow:n_pushButton_Scan_clicked()中
  1. connect(ui->pushButton_Stop, &QPushButton::clicked, this, &MainWindow::on_pushButton_Stop_clicked);  
  2. connect(ui->pushButton_Continue, &QPushButton::clicked, this, &MainWindow::on_pushButton_Continue_clicked);
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表