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找到的问题。
相关推荐
C++ 老炮儿的技术栈7 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
米优11 小时前
qt+vlc实现国标客户端测试工具
qt·gb28181·vlc
米优12 小时前
qt+vlc实现解码h264/h265裸码流播放
开发语言·qt·vlc
小小码农Come on12 小时前
QT面试题总结
开发语言·qt
特立独行的猫a13 小时前
HarmonyOS鸿蒙PC的QT应用开发:(二、开发环境搭建及第一个HelloWorld)
qt·华为·harmonyos·鸿蒙·鸿蒙pc
史迪仔011213 小时前
[QML] QT5和QT6 圆角的不同设置方法
前端·javascript·qt
一只小小的土拨鼠14 小时前
【避坑指南】Qt + MSVC + CUDA 项目链接与发布报错全记录
开发语言·qt
code_pgf14 小时前
RPC数据集整理与 Scalabel 标注说明
qt·网络协议·rpc
白杆杆红伞伞14 小时前
Qt Lock&Semaphore
qt·线程同步
专注VB编程开发20年14 小时前
WPS 2024 Windows版UI用QT5和自研DirectUI-vba,jsa
qt·vba·wps·jsa·directui