qt showevent引发的问题

qt开发客户端项目,会出现监听日志重复打印问题。

  • 开发工具: qt creator 4.8.0
  • 事件: void MainWindow::showEvent(QShowEvent *event)
  • 业务情景: 使用socket编程,创建服务端监听外部设备的连接。当只有一个设备连接到服务端后,对设备进行监听。如设备提供的电压、电流 出现问题,或者设备没了心跳 ,以及联网断线 ,都会打印日志 以及给出报警提示 ,并且还会有报警提示音
  • 异常情况: 当上述业务场景中设备异常 ,就会产生多次报警,影响产品使用体验 ,并且还会打印多个重复日志
  • 问题原因: showEvent事件重复执行 ,导致创建多个服务器server实例注册多次重复监听,会导致问题。
  • 解决方法: 增加校验参数。判断页面是否是初次打开
  • 问题排查思路: 此问题不容易发现,本机几乎很难发现此问题,会因人使用电脑的操作习惯不同 容易触发此bug
  • 下面是关键代码: 主页面页面展示时注册的监听回调方法,每次隐藏主页面打开时都会执行此方法。
c++ 复制代码
void MainWindow::showEvent(QShowEvent *event) {
    // 设置当前用户名(每次显示都需要更新)
    this->ui->loginName->setText(QString("当前登录用户: %1").arg(this->loginName));
    this->initStatusDesc();
    
    // 只在首次显示时执行初始化
    if (isFirstShow) {
        isFirstShow = false;
        
        // 页面显示时启动定时器(只在首次启动)
        tipTimer->start(5000);
        clockTimer->start(1000);
        
        // 添加提醒监听
        connect(this->tipManager, &DevTipManager::timeoffTip, this, [=](DevErrorMsgDTO devErrMsgDto){
            // 打印控制台
            this->consolePrint(devErrMsgDto.errorMsgEnHance);
            // 异常提醒
            this->popErrorMsg(devErrMsgDto);
        });
        // 初始化服务器
        iniTcpServer();
        // 添加离线监控
        Myapp::Pairs onlinePairsConfig = Myapp::getPairsByKey(Myapp::DEADLINE_LIMIT_TIME);
        devOnlineMgr = new DevOnlineManager(this, &onlinePairsConfig);
        // 添加离线设备监控
        initSystemSetListener();
    }
    
    // 触发故障检查(每次显示都需要执行)
    emit SignalRelayer::instance()->updateStatus();
}

总结

  1. 发现问题的思路:有些问题是操作习惯原因,很难发现,可以询问AI解决,此问题就是它抓到的。
  2. 有的时候我们认为AI只会编程,只会修改自己编写的程序bug,其实任何事情只要让他理解后都能尽职起到作用。
  3. 这次用的AI是在编程工具Cursor中使用的GPT-5.1 codex找到的问题。
相关推荐
编程小白202614 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
深蓝海拓14 小时前
PySide6,QCoreApplication::aboutToQuit与QtQore.qAddPostRoutine:退出前后的清理工作
笔记·python·qt·学习·pyqt
薛定谔的猫喵喵14 小时前
天然气压力能利用系统综合性评价平台:基于Python和PyQt5的AHP与模糊综合评价集成应用
开发语言·python·qt
云中飞鸿15 小时前
linux中qt安装
开发语言·qt
少控科技15 小时前
QT第6个程序 - 网页内容摘取
开发语言·qt
stevenson_aspdotnet16 小时前
QT5.15.12 编译备忘
qt
无小道19 小时前
QT——QFIie和QFileInfo文件类
开发语言·qt·命令模式
薛定谔的猫喵喵20 小时前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
薛定谔的猫喵喵21 小时前
基于C++ Qt的唐代诗歌查询系统设计与实现
c++·qt·sqlite
枫叶丹421 小时前
【Qt开发】Qt界面优化(一)-> Qt样式表(QSS) 背景介绍
开发语言·前端·qt·系统架构