地铁病害检测系统软件改进记录-2-02

新增功能如下:

1. 列表可视化:

在之前的版本中,检测列表仅按时间顺序追加,缺乏重点。为了提升判读效率,我主要在 QTableWidget 层面进行了以下两点改造:

A. 基于置信度的条件格式化 (Conditional Formatting)

为了让操作者能一眼识别出高可信度的病害,不再依赖肉眼逐行查看数值,我在数据插入阶段增加了分级渲染逻辑:

  • 高置信度 (Conf ≥ 0.85) : 系统判定为极高概率的病害。代码中将该行背景色设为浅红色 (255, 200, 200),作为一级视觉重心。

  • 中置信度 (0.5 ≤ Conf < 0.85) : 属于疑似病害或特征不明显的区域。背景色设为浅黄色 (255, 255, 200),提示需人工复核。

  • 普通置信度: 保持默认白色或交替色背景,作为背景数据。

B. 数值排序与视图防抖

启用表头排序功能后,解决了两个具体的技术细节:

  1. 数据类型修正QTableWidget 默认按字符串(String)进行字典序排序,这会导致 "0.10" 排在 "0.9" 之后。我重载了排序项的 __lt__ 方法,强制按 Float 数值 进行比对,确保排序逻辑符合数学定义。

  2. 动态更新下的视图防抖 : 在实测中发现,如果在检测进行(数据不断插入)的同时开启自动排序,列表会因频繁重排而剧烈跳动,导致无法选中或查看特定行。 优化方案:引入了状态互锁机制。

    • 检测中:强制关闭自动排序功能,新数据稳定追加到底部。

    • 暂停/停止:解锁排序功能,允许用户点击表头对已捕获的数据进行多维度分析。


2. 进程管理:修复"僵尸进程"问题

问题描述: 点击窗口右上角关闭按钮后,GUI 界面消失,但 IDE 终端仍处于运行状态(无 Exit Code),必须手动强制结束。

原因分析 : 主窗口销毁时,后台的 VideoThread(视频处理线程)可能正阻塞在 OpenCV 的 cap.read() 或 IO 操作中。默认的 close() 事件未包含等待子线程退出的逻辑,导致子线程由于资源未释放而挂起,进而阻塞了整个 Python 进程的退出。

解决方案 : 重写了 MainWindowcloseEvent,实施了更严格的线程退出策略:

Python

复制代码
def closeEvent(self, event):
    # 1. 发送停止信号
    if self.video_thread.isRunning():
        self.video_thread.stop()
        
        # 2. 引入超时等待机制 (Wait)
        # 给线程 2秒 的时间去完成当前帧处理、释放摄像头资源
        if not self.video_thread.wait(2000):
            # 3. 强制终止 (Terminate)
            # 如果线程因死锁或IO阻塞无法响应,强制回收系统资源
            self.video_thread.terminate()
            print("警告:视频线程未正常退出,已强制终止。")
    
    # 4. 显式退出 Qt 事件循环
    QApplication.instance().quit()
    event.accept()

此修改确保了无论线程处于何种状态(正常运行或阻塞),程序关闭时都能彻底释放摄像头占用并结束进程,解决了开发调试时的终端残留问题。

相关推荐
我命由我12345几秒前
JavaScript 开发 - 获取函数名称、获取函数参数数量、获取函数参数名称
开发语言·前端·javascript·css·html·html5·js
白晨并不是很能熬夜16 分钟前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
简简单单就是我_hehe30 分钟前
后端链路追踪局部采集和全量采集配置说明
java·开发语言
北京理工大学软件工程33 分钟前
C#111
开发语言·c#
IT_陈寒1 小时前
JavaScript里这个隐式类型转换的坑,我终于爬出来了
前端·人工智能·后端
方呵呵1 小时前
一个 3.5k Star Vue H5 项目的二次进化:我把它重构成了 Monorepo 工程体系
前端
_风满楼1 小时前
HTTP 请求的五种传参方式
前端·javascript·后端
叶子野格2 小时前
《C语言学习:指针》12
c语言·开发语言·c++·学习·visual studio
木斯佳2 小时前
前端八股文面经大全:字节暑期前端一面(2026-04-22)·面经深度解析
前端
光影少年2 小时前
前端线上屏幕出现卡顿如何排查?
开发语言·前端·javascript·学习·前端框架·node.js