你不知道的21个Qt隐藏功能和技巧

本文揭示了21个Qt库中不那么显眼但非常实用的功能,包括:Q_GADGET用于Meta Object功能,Q_ENUMS进行枚举反射,Q_SIGNAL与Q_SLOT简化信号槽定义,Q_FOREACH与Q_FOREVER宏,qChecksum计算CRC-16校验,qCompress/qUncompress实现压缩解压,qDeleteAll批量删除,qRound系列函数进行浮点数取整,qFuzzyCompare进行浮点数比较,qVersion获取Qt版本,sender获取信号源,QSysInfo获取系统信息,QtEndian处理字节序,findChildren<>查找子对象,qobject_cast实现类型转换,deleteLater延迟删除,qPrintable简化输出,以及利用信号触发信号等。这些技巧能提升Qt开发效率。
摘要由CSDN通过智能技术生成
  1. Q_GADGET:不需要从QObject继承就可以使用Qt的Meta Object功能
  2. Q_ENUMS:对枚举对象进行反射(reflection)
  3. Q_SIGNAL:不需要signals关键字就可以将一个函数指定为singal函数
  4. Q_SLOT:不需要slots关键字就可以将一个函数指定为slot函数
  5. Q_FOREACH:Qt提供的关键字foreach在配置文件里面定义了no_keywords的时候就失效了,而Q_FOREACH宏无论何时都有效
  6. Q_FOREVER:原因同Q_FOREACH,用法和关键字forever一样
  7. qChecksum:计算基于CRC-16-CCITT算法的CRC-16校验码
  8. qCompress/qUncompress:基于zlib的算法对字节缓存区进行压缩/解压,可以自定义压缩比
  9. qDeleteAll:对容器或者迭代器中的每个对象进行delete操作
  10. qRound/qRound64:对浮点数取整,四舍五入
  11. qFuzzyCompare:线程安全的浮点数模糊比较,处理了浮点精度误差的问题
  12. qVersion:获取当前正在运行的Qt的版本号
  13. sender:在slot函数中调用可以获取发送该signal的对象。仅用于来自同一线程的Qt::DirectConnection连接的signal。由于这种做法破坏了面向对象的原则,慎用!
  14. QSysInfo:获取当前运行的系统信息,包括版本号等,Mac/Symbian/Windows均适用
  15. QtEndian:处理不同体系架构下字节存储次序不同的问题
  16. QObject::findChildren<>:找出隐藏的子对象
  17. qobject_cast:不需要编译器RTTI的支持就可以实现C++标准库dynamic_cast的功能
  18. QObject::deleteLater:在事件处理循环中调用,则在事件处理循环结束时删除自己;在事件处理循环外调用,则在下一个事件处理循环开始时删除自己
  19. qPrintable:类似QString::toLocal8Bit()::constData(),但是更好记
  20. qDebug():类似Windows下的TRACE或者OutputDebugString
  21. connect(SomeObj, SIGNAL(foo()), SIGNAL(bar()):通过一个signal自动触发另一个signal。

文中的内容来自最近在StackOverflow上的一个讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值