最近项目中开发在用到QCombox,然而在开发中,踩到了一个坑,花了一个晚上,一直在想,好在最后找到问题所在了。

这是业务的流程。直接说重点:QCombox在下拉窗更新数据的时候,会默认把下拉窗的第一个条数据,设置为选中的状态,这样的话,就会产生curentTextChanged的一个信号,直接把逻辑层原先有的数据给修改了。

为此,进行了日志打印一探究竟:

void TalkWindow::getMicList(const QStringList & texts)

{

DEBUG_TRACE("getCurrentText %s" , m_pDeviceWidget->m_pMicrophoneCombox->currentText().toStdString().c_str());

if (m_pDeviceWidget == NULL) return;

m_pDeviceWidget->m_pMicrophoneCombox->clear();

int a = m_pDeviceWidget->m_pMicrophoneCombox->count();

m_pDeviceWidget->m_pMicrophoneCombox->setCurrentIndex(-1);

DEBUG_TRACE("getCurrentText1 %s", m_pDeviceWidget->m_pMicrophoneCombox->currentText().toStdString().c_str());

m_pDeviceWidget->m_pMicrophoneCombox->addItems(texts);

DEBUG_TRACE("getCurrentText2 %s", m_pDeviceWidget->m_pMicrophoneCombox->currentText().toStdString().c_str());

m_pDeviceWidget->m_pMicrophoneCombox->setCurrentIndex(-1);

m_pDeviceWidget->m_pMicrophoneCombox->insertItem(texts.size()+1, TR_TALK_DEVICE_COMBOX, 0);

m_pDeviceWidget->m_pMicrophoneCombox->setCurrentIndex(-1);

DEBUG_TRACE("getCurrentText3 %s", m_pDeviceWidget->m_pMicrophoneCombox->currentText().toStdString().c_str());

m_pDeviceWidget->m_pMicrophoneCombox->setCurrentIndex(-1);

DEBUG_TRACE("getCurrentText4 %s", m_pDeviceWidget->m_pMicrophoneCombox->currentText().toStdString().c_str());

m_pDeviceWidget->m_pMicrophoneCombox->setCurrentIndex(-1);

DEBUG_TRACE("getCurrentText!!!!! %s", m_pDeviceWidget->m_pMicrophoneCombox->currentText().toStdString().c_str());

}

日志显如下:

Line 151: [D:TalkWindow+13100:10356] 23:05:55.942 101261.059234 getCurrentText 麦克风 (7.1 SOUND EFFECT GAMING HEADSET)

Line 152: [D:TalkWindow+13100:10356] 23:05:55.943 101261.059569 getCurrentText1

Line 155: [D:TalkWindow+13100:10356] 23:05:55.943 101261.060339 getCurrentText2 麦克风 (High Definition Audio 设备)

Line 156: [D:TalkWindow+13100:10356] 23:05:55.944 101261.060662 getCurrentText3

Line 157: [D:TalkWindow+13100:10356] 23:05:55.944 101261.060866 getCurrentText4

Line 158: [D:TalkWindow+13100:10356] 23:05:55.944 101261.061036 getCurrentText!!!!!

在getCurrentText2的日志中,很明显,把additems的数据加载完完,默认选中就变了,然后再执行 setCurrentIndex的时候,把默认选中置为空,也就是说,一共产生了两次 textchange的信号。

解决办法:

我目前的解决办法是,在获取数据的时候,先断开信号槽的连接,disconnect函数,然后等把下拉窗的数据加载完,再connect函数连接上,这样,加载数据就避免了发送两次信号,修改原有的数据。当然也

可以一个标记bool值,信号发出去的时候,不去处理就好了,但是这样的话,可能不太好控制。所以我选择了前者。有更好的办法,多多指教。

combox qt 引起的删除失败_关于QT的QCombox的掉坑出坑相关推荐

  1. qt如何用python结合_在Qt(C++)中与Python混合编程

    一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...

  2. ubuntu qt编译mysql报错_[Linux]QT编译Mysql驱动(Mariadb驱动),解决qmake报错问题

    编译环境 系统:Ubuntu18.04 QT版本:Qt 5.14.0 gcc版本:gcc version 7.5.0 qt官方编译驱动方式 在使用QT连接数据库时遇见的第一个错误就是QMYSQL dr ...

  3. qt ui界面无法移动控件_使用qt 键盘上的方向键只能控制ui界面上的按钮选择,不能实现我设定的功能...

    已结贴√ 问题点数:20 回复次数:2 使用qt 键盘上的方向键只能控制ui界面上的按钮选择,不能实现我设定的功能 我做的是一个贪吃蛇游戏,现在我想实现的功能是:按下键盘上的上下左右箭头的方向按键时, ...

  4. qt连接mysql创建表_用Qt访问数据库写一个 表格

    访问数据库,将数据填充数据表格大致样子如下: 该怎么实现呢. 首先创建一个数据库模型的对象:QSqlQueryModel *model = new QSqlQueryModel; 然后提取数据库数据: ...

  5. qt链接mysql文件失败_【成功经验】QT读取access 2010的.accdb文件总是失败

    QT读取access失败,在输出窗口里面写着:QSqlDatabase: QODBC driver not loaded,到安装路径的plugins\Sqldriver里面没有QODB相关文件.正好有 ...

  6. python删除失败_对python 各种删除文件失败的处理方式分享

    对python 各种删除文件失败的处理方式分享 调用python提供的各种删除文件的操作均失败 返回值5,拒绝访问,但是多次确认文件没有被打开,文件是从一个zip包中解压出来后,没有任何打开读写等操作 ...

  7. 蓝牙设备删除失败_这软件能让你的蓝牙耳机,用上AirPods的功能

    打开这篇文章时,大家可能正佩戴着某款无线蓝牙耳机. 不管是头戴式,颈挂式还是分体式,总之现在无线蓝牙耳机已经跟智能手机一样,成为生活中很常见的随身物品. 但在大家渐渐对无线蓝牙耳机习以为常的时候,有个 ...

  8. qt跟随鼠标动态绘制_采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)...

    #include "MyTracer.h"XxwTracer::XxwTracer(QCustomPlot*_plot, TracerType _type, QObject *pa ...

  9. qt中socket通信流程图_使用QT实现简单的tcp/ip通信

    使用QT实现tcp/ip的通信非常的简单,下面我将直接贴出代码: 一.服务器端 1.头文件#ifndef SERVERWIDGET_H #define SERVERWIDGET_H #include ...

最新文章

  1. PI实时数据库管理员须知-5
  2. 让你分分钟学会Javascript中的闭包
  3. 细说plsql中的空值表达式
  4. android view setx,Android的setX()和setY()表现不可思议
  5. shell执行oracle存储过程,获得存储过程返回值
  6. 蓝桥杯-算法提高-打水问题
  7. hun暑期实训 最大报销额(01背包) 关于动态内存分配的new与delete
  8. php 合计,表格怎么合计总数
  9. golang实现文件服务器,【Golang】实现文件服务器断点续传
  10. [51nod]1284 2 3 5 7的倍数
  11. jQuery源码学习(四)
  12. mysql中一个字符等于几个字节_细说一个汉字等于几个字符,以及汉字,字符,字节,位之间的关系...
  13. 华为7c手机怎么恢复出厂设置_华为荣耀畅玩7A/7C解锁教程_荣耀畅玩7A/7C用官方解锁码解锁方法...
  14. Java中String使用及分析(UTF-8简单编码/解码器实现)
  15. Multigen VEGA簡介
  16. 跨境电商的支付方式有哪些?
  17. 把json数据导入linux,使用json文件给es中导入数据
  18. 【面试 - 八股文】Linux 高频面试题,助你吊打面试官系列
  19. Nlog日志记录组件使用
  20. 【调研】Soft Prompt Tuning 模型发展调研:P-tuning,Prefix-tuning,Prompt-tuning,P-tuning v2,PPT

热门文章

  1. 渲染测试软件 d15,D5 Render(D5 渲染器)1.7.0 正式版发布 | 一款 RTX 实时光线追踪可视化实时渲染引擎,而且是国产软件!...
  2. 这款IDEA插件,可以让你用中文编码哟
  3. Redis 内存压缩实战,学习了!
  4. 又一个 Java 面试神器!
  5. Master、Slave等术语将不能在未来的Linux代码中使用
  6. 面试:ArrayList哪种遍历效率最好?
  7. 读取Excel还用POI?试试这款开源工具
  8. Java8 Stream性能如何及评测工具推荐
  9. 微服务2017年度报告出炉:4大客户画像,15%传统企业已领跑
  10. Linux入门和运维